我有两个头文件,每个都需要在另一个中定义的类型.当我尝试编译时,我收到有关未知类型名称的错误.(如果我只提供结构声明而不是定义,我会得到一个不完整类型的错误.)什么是让我能够正确分享这些结构的解决方案?
现在,我的代码看起来很像以下(想象#ifndef预处理器指令等):
<headerA.h>
#include "headerB.h"
typedef struct {
mytypeB myB;
} mytypeA;
<headerB.h>
#include "headerA.h"
typedef struct {} mytypeB;
void foo( mytypeA * myA);
Run Code Online (Sandbox Code Playgroud)
你应该转发声明struct mytypeA而不是包括headerA.h:
在headerB.h里面:
struct mytypeA; // <<<--- Forward declaration
void foo(struct mytypeA* myA);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为您没有使用实际的mytypeA,只有指向它的指针.你不能用同样的技巧headerA,因为mytypeA包括实际mytypeB.