无法初始化结构体中的条件变量



为什么我不能在结构体中初始化条件变量?我希望每个节点都有一个条件变量,这样我就可以等待并发出信号,当我添加初始化代码时,它会抛出这个错误:预期 ‘:’, ‘,’, ‘;’, ‘}’ 性>"之前"="牌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;

最新更新