3

为什么我无法在结构中初始化条件变量?我希望每个节点都有一个条件变量,这样我就可以等待并发出信号,当我添加初始化代码时,它会抛出这个错误:预期的':',',',';','}'或'<strong> '=' 标记之前的属性':* [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;

两件事情:

您使用的代码失败,因为您在定义结构时无法指定成员的初始化。初始化伴随着对象的定义,而不是类型的定义。

扩展PTHREAD_COND_INITIALIZER具有初始化程序的格式,例如{ values }. 它不是表达式,因此您不能在赋值语句中正常使用它。但是,(pthread_cond_t) PTHREAD_COND_INITIALIZER上面显示的创建了一个“复合文字”,它是一个表达式。

于 2013-04-12T16:42:12.657 回答
-1

要初始化结构成员,您必须按如下方式创建结构的实例。

结构 trie_node my_node;

然后你可以像下面这样初始化它。

my_node.condition=PTHREAD_COND_INITIALIZER;

或者

结构 trie_node *my_node; my_node->条件=PTHREAD_COND_INITIALIZER;

于 2013-04-12T16:16:38.023 回答