我有两个头文件,每个头文件都需要另一个定义的类型。当我尝试编译时,我收到有关未知类型名称的错误。 (如果我只提供结构声明而不是定义,我会得到一个不完整类型的错误。)什么是允许我正确分享这些结构的解决方案?
现在,我的代码看起来很像以下(想象一下#ifndef
预处理程序指令等。):
<headerA.h>
#include "headerB.h"
typedef struct {
mytypeB myB;
} mytypeA;
<headerB.h>
#include "headerA.h"
typedef struct {} mytypeB;
void foo( mytypeA * myA);
答案 0 :(得分:5)
您应该转发声明struct mytypeA
,而不是包含headerA.h
:
在headerB.h内:
struct mytypeA; // <<<--- Forward declaration
void foo(struct mytypeA* myA);
这是有效的,因为您没有使用实际的mytypeA
,只是指向它的指针。您无法使用headerA
提取同一技巧,因为mytypeA
包含实际的mytypeB
。
答案 1 :(得分:1)
您可以转发声明结构,而无需定义整个事物。
答案 2 :(得分:0)