错误C2016:C要求结构或联合具有从结构的至少一个成员(error C2016: C requir

2019-09-16 08:33发布

当我做这样的事情有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;

请帮我明白了,我该怎么错在何处。 谢谢。

Answer 1:

你正在尝试做是行不通的,因为你有两个头文件之间的循环依赖:

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而不是完整的对象。 这样一来,你并不真的需要定义AB

因此:

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;


Answer 2:

你的代码,你给它找错了,在不同的地方。 我想你想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
标签: c struct