错误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成为一个typedefstruct a

最简单的方法是始终将typedef作为前向声明放在一个头文件中

 typedef struct a A; typedef struct b B; 

然后你必须以正确的顺序拥有struct的声明(没有任何其他typedef )。 在这里你的struct b只需要一个指向A的指针,所以这只适用于上面的typedef 。 但是struct a需要整个B而不仅仅是一个指针,所以你的struct a声明必须看到 struct b的整个声明。