每个.h文件都需要在另一个中定义的结构? (C)

时间:2012-03-05 03:58:38

标签: c

我有两个头文件,每个头文件都需要另一个定义的类型。当我尝试编译时,我收到有关未知类型名称的错误。 (如果我只提供结构声明而不是定义,我会得到一个不完整类型的错误。)什么是允许我正确分享这些结构的解决方案?

现在,我的代码看起来很像以下(想象一下#ifndef预处理程序指令等。):

<headerA.h>

#include "headerB.h"
typedef struct { 
  mytypeB myB;
} mytypeA;

<headerB.h>

#include "headerA.h"
typedef struct {} mytypeB;
void foo( mytypeA * myA);

3 个答案:

答案 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)