当我做这样的事情有2个文件:headerfile_1.h和headerfile_2.h我得到错误:错误C2016:C要求结构或联合具有从结构中headerfile_1.h的定义至少一个成员
在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
而不是完整的对象。 这样一来,你并不真的需要定义A
前B
。
因此:
headerfile_1:
#include "headerfile_2.h"
struct A{
B bb;
};
headerfile_2:
typedef struct A A;
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
。
文章来源: error C2016: C requires that a struct or union has at least one member from struct