我对c ++头文件及其包含有疑问。
请考虑以下情况。
我在里面有以下文件和代码:
class A
{
// ...
};
#include "A.h"
// implementation of A
class B
{
A object;
}
#include "A.h"
#include "B.h"
/// implementation of B
当我尝试构建时,编译器会在B.h中出错,因为我没有包含A.h。
问题是为什么编译器单独编译头文件,如果它们包含在某些cpp文件中并且包含预处理器正在复制/粘贴头文件的完整内容,并且头文件内容将使用cpp文件编译,其中包含它。
答案 0 :(得分:1)
如果B.h需要A.h,你应该将A.h包括在B.h中,因为你不能假设每次包括B.h,A.h将被包含在之前。
当然,如果你只是将A.h包含在B.h中,你将会解析A.h两次(或更多),所以重复的定义和一堆错误,这就是为什么你还必须包括标题保护。有关标题保护的说明,请参阅C++ #include guards。
答案 1 :(得分:0)
您可以对两个.h文件使用标头保护结构:
#ifndef FILE_A_H
#define FILE_A_H
/*Your header*/
#endif
除此之外,您可以在主标题中添加该类的声明。