3

構造体で条件変数を初期化できないのはなぜですか? 各ノードに条件変数を持たせて、待機して通知できるようにしたいのですが、初期化コードを追加すると、次のエラーがスローされます: expected ':', ',', ';', '}' or '<strong> attribute' before '=' token make: * [trie.o] エラー 1

必要に応じて(構造体ではなく)どこかで初期化を試みましたが、まだエラーが発生します。pthreads.h を含めました。

struct trie_node {

  pthread_cond_t condition=PTHREAD_COND_INITIALIZER;
};
4

3 に答える 3

1

PTHREAD_COND_INITIALIZER構造体メンバの初期化時には使用できません。

pthread_cond_init構造体のインスタンスを作成した後に使用する必要があります。

実際、構造体定義では構造体メンバーをまったく初期化できません。これだけではありません。

于 2013-04-12T16:10:37.533 に答える
0

struct trie_node オブジェクトを定義するときに初期化するには、次を使用します。

struct trie_node x = { …, PTHREAD_COND_INTIALIZER, … };

「…」の代わりに、構造体の他のメンバーの初期化子を配置します (存在する場合)。気にしない場合は、末尾のものを省略できます。

condition既存のオブジェクトのメンバーに値を割り当てるには、次を使用します。

x.condition = (pthread_cond_t) PTHREAD_COND_INITIALIZER;

2つのこと:

構造体を定義するときにメンバーの初期化を指定できないため、使用したコードは失敗しました。初期化は、型の定義ではなく、オブジェクトの定義に伴います。

展開PTHREAD_COND_INITIALIZERには、 のような初期化子の形式があります{ values }。式ではないので代入文では普通に使えません。ただし、(pthread_cond_t) PTHREAD_COND_INITIALIZER上記の例では、式である「複合リテラル」が作成されます。

于 2013-04-12T16:42:12.657 に答える