Incompatible pointer types initializing 初始化一个基本的 trie 节点
incompatible pointer types initializing initializing a basic trie node
我知道 C 在文件级初始化方面非常挑剔。或者更确切地说,我只是还不知道常量表达式是什么意思。
我想要做的是用所有空指针初始化一个节点(又名结构节点)。
//Trie node definition
typedef struct node{
bool is_word;
struct node* next[27]; //27 for the valid number of chars
}node;
struct node* empties[27];
node empty = {.is_word = 0, .next = empties};
dictionary.c:24:33: error: incompatible pointer types initializing 'struct node *' with an
expression of type 'struct node *[27]' [-Werror,-Wincompatible-pointer-types]
node empty = {.is_word=0,.next =empties};
^~~~~~~
dictionary.c:24:33: error: suggest braces around initialization of subobject
[-Werror,-Wmissing-braces]
node empty = {.is_word=0,.next =empties};
我在尝试初始化时遇到错误。我也会尝试手动初始化成员,但 27 个索引使这非常乏味。有没有办法在文件级别循环初始化?
尝试node empty = {0, {0}};
。
这是初始化结构和数组的有效方法,或者在本例中,初始化包含数组的结构。
How to initialize all members of an array to the same value? 有更多关于数组初始化的内容。但是您也可以将初始化程序嵌入到结构中,如此处所示。
依赖永久变量(非自动,非动态)0初始化是可以的。但是,错误报告类型错误: next
是一个指针数组,而您使用指向数组的指针对其进行初始化。如果你真的想要一个指向数组的指针,请使用 struct node (*next)[]
).
因此,第二条消息已经包含了您拥有嵌套复合数据类型(结构中的数组)的提示。请记住,每个复合类型的初始值设定项都需要用大括号括起来。
我知道 C 在文件级初始化方面非常挑剔。或者更确切地说,我只是还不知道常量表达式是什么意思。
我想要做的是用所有空指针初始化一个节点(又名结构节点)。
//Trie node definition
typedef struct node{
bool is_word;
struct node* next[27]; //27 for the valid number of chars
}node;
struct node* empties[27];
node empty = {.is_word = 0, .next = empties};
dictionary.c:24:33: error: incompatible pointer types initializing 'struct node *' with an
expression of type 'struct node *[27]' [-Werror,-Wincompatible-pointer-types]
node empty = {.is_word=0,.next =empties};
^~~~~~~
dictionary.c:24:33: error: suggest braces around initialization of subobject
[-Werror,-Wmissing-braces]
node empty = {.is_word=0,.next =empties};
我在尝试初始化时遇到错误。我也会尝试手动初始化成员,但 27 个索引使这非常乏味。有没有办法在文件级别循环初始化?
尝试node empty = {0, {0}};
。
这是初始化结构和数组的有效方法,或者在本例中,初始化包含数组的结构。
How to initialize all members of an array to the same value? 有更多关于数组初始化的内容。但是您也可以将初始化程序嵌入到结构中,如此处所示。
依赖永久变量(非自动,非动态)0初始化是可以的。但是,错误报告类型错误: next
是一个指针数组,而您使用指向数组的指针对其进行初始化。如果你真的想要一个指向数组的指针,请使用 struct node (*next)[]
).
因此,第二条消息已经包含了您拥有嵌套复合数据类型(结构中的数组)的提示。请记住,每个复合类型的初始值设定项都需要用大括号括起来。