当我使用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;
Run Code Online (Sandbox Code Playgroud)
在headerfile_2.h中
typedef struct b{
void (*func0)(A *aa);
}B;
Run Code Online (Sandbox Code Playgroud)
请帮助我理解,我哪里出错了.谢谢.
您尝试执行的操作将无法正常工作,因为您在两个头文件之间存在循环依赖关系:
headerfile_1:
struct A{
B bb; /* Use of B, therefore B needs to be defined before A */
};
Run Code Online (Sandbox Code Playgroud)
headerfile_2:
typedef struct b{
void (*func0)(A a); /* Use of A, therefore A needs to be defined before B */
} B;
Run Code Online (Sandbox Code Playgroud)
不可能.
您可以做的一件事是更改定义func0以获取指针A而不是完整对象.这样,你真的不需要A之前的定义B.
因此:
headerfile_1:
#include "headerfile_2.h"
struct A{
B bb;
};
Run Code Online (Sandbox Code Playgroud)
headerfile_2:
typedef struct A A;
typedef struct b{
void (*func0)(A *a); /* A * instead of A */
} B;
Run Code Online (Sandbox Code Playgroud)