gpt4 book ai didi

c - "error: dereferencing pointer to incomplete type"在 c

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:37 26 4
gpt4 key购买 nike

好的,我已经在谷歌上看到这个问题一百万次了,但对我来说仍然没有成功。我正在尝试创建一个链表。这是 List.c 中定义的结构:

typedef struct List
{
unsigned int size;
ObjectP head;
} List;

现在您会注意到 struct 和 typedef 都被命名为 LIST,据我所知这很好。但重要的是该结构不是匿名的。

现在在 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);
}
}

我不明白为什么 obj1 = list->head; 没问题,但在其他任何我尝试访问结构成员的地方我都遇到了这个错误。正如我所说,我已经尝试寻找它,但其他人有我在我的代码中找不到的错误。谢谢!

编辑:List.c 还包括 Object.h 所以这不是问题所在。对象定义如下:

Object.h 我有 typedef struct Object* ObjectP;在 Object.c 我有

typedef struct Object
{
void* key;
ObjectP next;
} Object;

还是不知道是什么问题!

最佳答案

看起来您在不同的 C 文件(可能是 Object.c)中为 ObjectP 定义了结构。编译器在编译List.c时,不知道其他c文件中定义了什么,只知道当前c文件中已经包含的h文件中定义了什么。

由不同的 c 文件共享的结构必须在一个头文件中定义,该头文件可以包含在所有这些文件中。因此,如果您只是将 struct Object 的定义移动到 Object.h,您应该没问题。

关于c - "error: dereferencing pointer to incomplete type"在 c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7146518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com