使用另一个头中定义的结构

时间:2015-05-25 01:08:36

标签: c++ header

我有2个头文件。我的代码类似于以下内容:

file1.h

#include "file2.h"

struct foo{
   int one;
};

//compiles if I add the following line.
//struct bar;

void dosomething(bar* param);
foo* dosomething1();

file2.h

#include "file1.h"

struct bar{
   int two;
   struct foo* two;
};

//also error in compilation time unless I add the following
//struct foo;
void dostuff(foo* param);

为什么屈服不会命名一个类型" bar" file1.h中的错误。 我想通过包含file2.h,bar *将被定义为foo * 反之亦然。

1 个答案:

答案 0 :(得分:1)

标头文件应该有include guards,以防范 通告包括。

使用前向声明可以打破

循环依赖关系, 就像你写的:

struct bar;

这是因为#include指令只是预处理器替换文本

的指令

这意味着循环中的第二次包括预处理器尝试包含一个文件,include guard会阻止它,因此编译器第一次看到file1.h时,它还没有看到{{1 }}