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

时间:2014-05-08 10:03:38

标签: c struct typedef

我有一个dish.h文件,我写了这个typedef:

typedef struct dish_t* Dish;

然后我有一个dish.c文件,我在其中定义了我的结构:

struct dish_t {
Type type;
char *name;
int sweetness;
int saltiness;
int sourness;
};

我在dish.c中写了一些unitests。他们没事,但是一旦我把它们移到了一个sepearate dish_test.c文件中,我就收到了以下错误:

"指向不完整类型的指针"

一旦我尝试访问像这样的Dish实例,它就得到了支持:

    dish=dishCreate("soup",1,2,3,type,&error);
    int cmp=strcmp("soup",dish->name); // error accured here

为什么它会开心呢?

2 个答案:

答案 0 :(得分:1)

在多个文件中使用时,应将结构定义移动到头文件中。

如果你想让它保持“私密”,你需要两个头文件,一个是公共文件,一个是私有文件。

答案 1 :(得分:0)

之所以发生这种情况,是因为您将定义移出了测试代码无法看到的位置。

#include完全相同,它包含您提供的文件。在移动定义之前,编译器构建结构的方式是可见的,现在它无法知道" name"盘结构的元素是。

将类型的定义移回标题中,或者使用Dish的访问器函数,而不是直接写入元素,如果您希望更像OO样式。