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