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



我正在尝试从我制作的树字段中获取信息,但标题中出现错误:取消引用指向不完整类型"struct List_t"的指针

树源文件:

struct Node_t{
Element data;
char* location;
struct Node_t*  son;
struct Node_t* next; 
};
struct List_t{
Node head;
copyFunc copyfunc;
compareFunc compfunc;
freeFunc freefunc;
printFunc printfunc;
};

树头文件:

typedef struct Node_t* Node;
typedef struct List_t* Tree;
typedef void* Element;

应用源文件:

Tree t;
t = createTree(compareInt, copyInt , freeInt, printInt);
int* x =(int*)malloc(sizeof(int));
*x=53;
Add(t, x);
char* location;
location= t->head->location; //here I got the error
printf(location);

我该怎么办?我做错了什么?

谢谢!

struct List_t的声明需要位于头文件中。 连同createTree声明.

您提供了三段代码,并将它们标识为:

  1. 树源文件:

  2. 树头文件:

  3. 应用源文件:

让我们将这些文件称为tree.ctree.happ.c

编译C源文件时,通常只有一个.c文件,其中可能包含如下行:

#include <stdio.h>
#include "tree.h"

里面。这就是编译器知道去另一个文件中查找定义的方式。

如果您的app.c文件包含上述行,则app.c中的代码只能使用stdio.htree.h提供的信息。

特别是,如果您在tree.c中提供了信息,则该信息对app.c不可见,因为没有引用它的#include指令。

解决方案是(正如其他人所说)将struct定义和typedef语句以及公共接口的任何其他部分移动到tree.h文件中。

或者,如果您希望结构的成员是私有的,则可以提供一个返回数据的函数。当然,该函数的声明将是公共接口的一部分,因此它也必须在tree.h文件中(函数的定义可以是tree.c,但声明将是公共的)。

相关内容

  • 没有找到相关文章

最新更新