为什么我无法在结构中初始化条件变量?我希望每个节点都有一个条件变量,这样我就可以等待并发出信号,当我添加初始化代码时,它会抛出这个错误:预期的':',',',';','}'或'<strong> '=' 标记之前的属性':* [trie.o] 错误 1
我尝试在需要时(不在结构中)进行初始化,但仍然出现错误,我已经包含了 pthreads.h
struct trie_node {
pthread_cond_t condition=PTHREAD_COND_INITIALIZER;
};
PTHREAD_COND_INITIALIZER
初始化结构成员时不能使用。
您必须pthread_cond_init
在创建结构实例后使用。
实际上,在结构体定义中根本无法初始化结构体成员,不只是这个。
要在定义 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
上面显示的创建了一个“复合文字”,它是一个表达式。
要初始化结构成员,您必须按如下方式创建结构的实例。
结构 trie_node my_node;
然后你可以像下面这样初始化它。
my_node.condition=PTHREAD_COND_INITIALIZER;
或者
结构 trie_node *my_node; my_node->条件=PTHREAD_COND_INITIALIZER;