头文件的多个包含

时间:2013-02-23 20:35:49

标签: c++

我有A.cppB.cpp,其中都包含头文件header.h

后来A.cppB.cpp都包含在main.cpp中。

当编译main.cpp时,如果头文件header.h已被包含两次,则会导致错误。

如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

您应该在

中包围您的标题文件
#ifndef MYFILE_H
#define MYFILE_H

// Contents of your file

#endif

这些被称为包括警卫。

第二点:你不应该包括.cpp文件,只包括.h文件。

答案 1 :(得分:2)

使用include guards。在标题中,例如:

// Header.h
#ifndef HEADER_H_
#define HEADER_H_

// code from original header.h

#endif

并且不要在其他.cpp文件中包含.cpp个文件。仅包含必要的标题。

编辑如果头文件来自第三方库,并且没有包含警卫,我会非常怀疑该库。我会放弃它。但是,您可以创建自己的标题,包括include guard中的库标题:

// FixedHeader.h
#ifndef HEADER_H_
#define HEADER_H_

#include "header.h"

#endif

然后#include "FixedHeader.h"。但我会严肃地放弃图书馆。

答案 2 :(得分:2)

如果您无法修改头文件以包含警卫,则有3种可能的解决方案(从最好到最差):

1不要使用那些垃圾 2使用包装器my_header.h

#ifndef MY_HEADER_H
#define MY_HEADER_H
#include <header.h>
#endif // MY_HEADER_H

在代码中包含my_header.h而不是header.h

3在.cpp文件中使用警卫

 #ifndef HEADER_H  
 #define HEADER_H  
 #include <header.h>  
 #endif // HEADER_H

你必须保持一致并且在任何地方使用相同的警卫(这就是解决方案3的原因)