错误C2016:C要求struct或union至少有一个struct成员
当我使用2个头文件执行此类操作时:headerfile_1.h和headerfile_2.h我收到错误:错误C2016:C要求struct或union至少有一个来自headerfile_1.h中struct A定义的成员
在headerfile_1.h中
#include "headerfile_2.h" struct a; struct a{ B bb; }A;
在headerfile_2.h中
typedef struct b{ void (*func0)(A *aa); }B;
请帮助我理解,我哪里出错了。 谢谢。
您尝试做的事情将无法正常工作,因为您在两个头文件之间存在循环依赖关系:
headerfile_1:
struct A{ B bb; /* Use of B, therefore B needs to be defined before A */ };
headerfile_2:
typedef struct b{ void (*func0)(A a); /* Use of A, therefore A needs to be defined before B */ } B;
不可能。
您可以做的一件事是更改func0
定义以获取指向A
而不是完整对象的指针。 这样,你真的不需要B
之前的A
定义。
因此:
headerfile_1:
#include "headerfile_2.h" struct A{ B bb; };
headerfile_2:
typedef struct AA; typedef struct b{ void (*func0)(A *a); /* A * instead of A */ } B;
你给它的代码在不同的地方弄错了。 我想你想要A
成为一个typedef
来struct a
?
最简单的方法是始终将typedef
作为前向声明放在一个头文件中
typedef struct a A; typedef struct b B;
然后你必须以正确的顺序拥有struct
的声明(没有任何其他typedef
)。 在这里你的struct b
只需要一个指向A
的指针,所以这只适用于上面的typedef
。 但是struct a
需要整个B
而不仅仅是一个指针,所以你的struct a
声明必须看到 struct b
的整个声明。