C 语言报错 xxx incomplete type xxx
一般原因就是使用结构体的代码没有定义结构体。
举个例子,你有两个 .h 文件:
a.h
struct a {int x;int y;
};
b.h
struct b {int z;struct a *ap;
};
这里 b.h 使用了 a.h 里定义的结构体。
假设你现在有个 test.c 文件
#include <b.h>...
// 使用了 struct a
...
那么由于没有 #include <a.h>
,就会报错 “xxx incomplete type xxx”
或者换一种情况,include 头文件的顺序不对
#include <b.h>
#include <a.h>...
// 使用了 struct a
...
根据经验,通常也会报错 “xxx incomplete type xxx”,这次发生在 b.h 里。
需要调换顺序,先 include a.h 再 include b.h,才能编译成功