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

上一篇: C++ Header files and compilation process

下一篇: C++ palindrome debugging