&引用;错误:取消引用指向不完整类型的指针;在c中
好吧,这个问题我在谷歌上已经看了一百万遍了,但对我来说还是没有成功。 我正在尝试创建一个链接列表。下面是在&引用;错误:取消引用指向不完整类型的指针;在c中,c,struct,C,Struct,好吧,这个问题我在谷歌上已经看了一百万遍了,但对我来说还是没有成功。 我正在尝试创建一个链接列表。下面是在List.c中定义的结构: typedef struct List { unsigned int size; ObjectP head; } List; 现在您会注意到,struct和typedef都是命名列表,据我所知,这很好。但重要的是结构不是匿名的 现在在List.h(当然包括在List.c)中,我定义了另一个typedef: typedef struct List*
List.c
中定义的结构:
typedef struct List
{
unsigned int size;
ObjectP head;
} List;
现在您会注意到,struct和typedef都是命名列表,据我所知,这很好。但重要的是结构不是匿名的
现在在List.h
(当然包括在List.c
)中,我定义了另一个typedef:
typedef struct List* ListP;
据我所知,它将ListP定义为指向名为List的结构的指针,就像我真正命名它一样
这里是我得到错误的地方:
void freeList(ListP list)
{
ObjectP obj1;
ObjectP obj2;
if (list != NULL)
{
obj1 = list->head;
while (obj1->next != NULL) <---- HERE
{
obj2 = obj1;
obj1 = obj1->next; <---- HERE
freeObject(obj2);
}
free(list);
}
}
还是不知道是什么问题
ObjectP
被定义为指向Object
的指针,Object
的成员类型为ObjectP
。这是一个循环依赖项
尝试:
哦,还有任务演员:
obj1 = (ObjectP) obj1->next;
看起来您在不同的C文件(可能是Object.C)中定义了
ObjectP
的结构。当编译器编译List.c时,它不知道其他c文件中定义的任何内容,只知道当前c文件中包含的h文件中定义的内容
不同c文件共享的结构必须在头文件中定义,头文件可以包含在所有c文件中。因此,如果您只是将
struct Object
的定义移动到Object.h,您应该可以。下一个定义在哪里?是否在代码中包含ObjectP
是什么?如何定义ObjectP?在使用它定义列表结构之前是否正确定义了它?什么是ObjectP
?我假设您将它用作列表中的节点,但您没有提供任何定义。出现错误是因为您如何使用ObjectP
,而不是因为与ListP
类型相关的任何内容。您的问题以“和在Object.c中我有[code>对象的定义
]”的部分开始和结束。如果它在对象.c
文件中,则列表.c
中的代码不知道构成对象的任何字段。因此,当您尝试访问一个时会出现错误。你需要在Object.h
中定义你的对象
结构(或者从List.c
中删除对该结构内部事物的引用)。我很确定你的typedef中的顺序是颠倒的。你是什么意思?它在这里编译。强制转换无法解决“不完整类型”问题@bmearns遇到了真正的问题。
typedef struct object_st {
void* key;
struct object_st *next;
} Object;
typedef ObjectP *Object;
obj1 = (ObjectP) obj1->next;