C ++头文件和编译过程
我有一个关于c ++头文件及其包含的问题。
考虑以下情况。
我在里面有以下文件和代码:
啊
class A
{
// ...
};
A.cpp
#include "A.h"
// implementation of A
BH
class B
{
A object;
}
B.cpp
#include "A.h"
#include "B.h"
/// implementation of B
当我尝试编译时,编译器在Bh中给出了一个错误,它无法识别A,因为我没有包含Ah
问题是为什么编译器单独编译头文件,如果它们包含在一些cpp文件中,并且包括预处理器正在复制/粘贴头文件的全部内容,那么头文件内容将用cpp文件进行编译,它包含在内。
如果Bh要求Ah,那么你应该把Ah包括进Bh中,因为你不能认为每当包含Bh时,就会包含Ah。
当然,如果你简单地将Ah包含在Bh中,你将会对Ah进行两次(或更多次)解析,所以重复的定义和一堆错误,这就是为什么你还必须包含头部守卫。 有关标头警卫的解释,请参见C ++ #include警卫。
这两个.h文件都可以使用标题保护结构:
#ifndef FILE_A_H
#define FILE_A_H
/*Your header*/
#endif
除此之外,您还可以在主标题中添加该类的声明。
链接地址: http://www.djcxy.com/p/86325.html