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