字段有不完整类型?

时间:2013-12-07 09:18:26

标签: c

我收到有关struct元素的错误。

struct trie {
        char ch;
        bool isEnd;
        struct trie arr[4];
        struct trie *next;
};

错误:

error: field ‘arr’ has incomplete type

3 个答案:

答案 0 :(得分:3)

您可以通过这种方式定义结构

struct trie {
    char ch;
    bool isEnd;
    struct trie *arr[4];
    struct trie *next;
};

请注意(为了避免无限递归)arr现在是一个包含四个指针的数组,每个指针指的是一个你必须动态分配的 trie 结构在你的代码上。

您可以使用此功能分配 trie (未初始化):

struct trie *alloc_trie() {
    return malloc(sizeof(struct trie));
}

请注意,未分配四个 arr 项指向的四个 trie 。也不是下一个

答案 1 :(得分:2)

你不能把结构放在自己身上(只是考虑一下,它没有意义)。它会导致关于类型的“无限递归”。也许你可以使用另一个指向struct trie的指针来为其动态分配内存。但我不确定你想要达到的目标。也许你想要一个指针数组? struct trie *arr[4]或类似的。

答案 2 :(得分:-1)

转发声明如下:

typedef struct trie trie;

struct trie {
  char ch; 
  int isEnd; //bool unsupported for c89 so..
  trie *arr; //have to manually alloc 4 trie here..
  trie *next;
};

编辑:从c99草案标准7.1.3 Reserved Identifiers部分[注释中指明]

中删除了命名下划线