C编程 - 编译器告诉我我正在取消引用一个不完整的类型

时间:2014-04-07 17:06:27

标签: c types struct

代码的结构是我有一个struct“entry”,它存储在一个循环列表“bucket”中,它存储在一个哈希表中。 “条目”有两个字段(a和b),当我搜索字段a并返回字段b时,我试图按以下方式进行:

ht_lookup(d.dict->items[bucket],field_a)

我已经搜索了这个,解决方案似乎是包含定义存储桶的头文件,但我已经包含了定义存储桶的头文件,即循环列表,所以我不明白该类型是怎样的不完整的。我可以用代码做什么来渲染类型吗?

我在我的智慧结束时,任何帮助都非常感激。

struct dictionary
{
  ht *   dict;
} d;

struct entry
{
  char   word[MAX_WORD_SIZE];
  char   desc[MAX_DESC_SIZE];
};

这是在

之后
`#include "ht.h"`

定义哈希表的位置,即每个桶的位置:

ht * new_ht(int max, hashfun h1, getkeyfun getkey)
{
int i;
ht * t = (ht*)malloc(sizeof(ht));
t->items = (clist**)malloc(max * sizeof(clist*));
t->size = 0;
t->h1 = h1;
t->getkey = getkey;
t->max = max;
for (i=0; i<max; i++)
    t->items[i] = new_clist();
return t;
}

gcc正在输出此错误:

错误:取消引用指向不完整类型的指针

1 个答案:

答案 0 :(得分:1)

d.dict是指针的东西,编译器缺少这个东西的定义。 d类型为struct,包含dict成员,指向某些(可能)其他struct的指针。编译单元中缺少此另一个struct的定义。