Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器是如何读取这个的?_C++_Header_Include - Fatal编程技术网

C++ 编译器是如何读取这个的?

C++ 编译器是如何读取这个的?,c++,header,include,C++,Header,Include,我不是100%了解编译器如何读取头文件,所以我想知道为什么这会导致编译器错误而无法工作: #ifndef FOO_H #define FOO_H #include "central.h" class Foo { Oof var; } #endif 当编译时,它给出了一个错误“oof没有命名一个类型”。我最好的猜测是,这是因为它们继续相互包含 除此之外,在Foo中执行#include“oof.h”是否是执行我在这里尝试执行的操作的唯一/最佳方法?编译器通过将头文件粘

我不是100%了解编译器如何读取头文件,所以我想知道为什么这会导致编译器错误而无法工作:

#ifndef FOO_H
#define FOO_H

#include "central.h"

class Foo
{
  Oof var;
}

#endif
当编译时,它给出了一个错误“oof没有命名一个类型”。我最好的猜测是,这是因为它们继续相互包含


除此之外,在Foo中执行
#include“oof.h”
是否是执行我在这里尝试执行的操作的唯一/最佳方法?

编译器通过将头文件粘贴到
#include
行来读取头文件。更具体地说,预处理器在编译器看到它之前就这样做了。这里似乎有两个循环包含依赖项,这是故意的吗?据我所知,你不应该在foo.h和oof.h中包含central.h。@mkrieger1我确实有它们相互包含,但我不知道它有一个名称。所以你不能有周期性的依赖关系。换句话说,如果foo需要任何include路径,它必须在自己的头中有自己的include语句,并且不能依赖于central.h include路径。是这样吗?接下来,central.h是否需要像“include if foo或oof”这样的东西?如果没有,为了清楚起见,不做还是把它放在那里是一种好的做法?
#ifndef OOF_H
#define OOF_H

#include "central.h"

class Oof {}
#ifndef CENTRAL_H
#define CENTRAL_H

#include "foo.h"
#include "oof.h"