我有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 * 反之亦然。
答案 0 :(得分:1)
标头文件应该有include guards,以防范 通告包括。
使用前向声明可以打破循环依赖关系, 就像你写的:
struct bar;
这是因为#include
指令只是预处理器替换文本
这意味着循环中的第二次包括预处理器尝试包含一个文件,include guard会阻止它,因此编译器第一次看到file1.h
时,它还没有看到{{1 }}