错误C2016:C要求struct或union至少有一个struct成员

use*_*265 2 c 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;
Run Code Online (Sandbox Code Playgroud)

在headerfile_2.h中

typedef struct b{
  void (*func0)(A *aa);
}B;
Run Code Online (Sandbox Code Playgroud)

请帮助我理解,我哪里出错了.谢谢.

Sha*_*baz 5

您尝试执行的操作将无法正常工作,因为您在两个头文件之间存在循环依赖关系:

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)