多个包含头文件
Multiple inclusions of header files
我有A.cpp
和B.cpp
,它们都包含头文件header.h
。
后来,A.cpp
和B.cpp
都包含在main.cpp
中。
当编译main.cpp
指出头文件header.h
已包含两次时,这会导致错误。
如何解决这个问题?
你应该把你的头文件括起来
#ifndef MYFILE_H
#define MYFILE_H
// Contents of your file
#endif
这些被称为包括警卫。
第二点:你不应该包含.cpp文件,只包含.h文件。
使用包含保护。 例如:
// Header.h
#ifndef HEADER_H_
#define HEADER_H_
// code from original header.h
#endif
并且不要在其他.cpp
文件中包含.cpp
文件。仅包含必要的标头。
编辑 如果头文件来自第三方库,并且没有包含保护,我会非常怀疑该库。我会放弃它。但是,您可以创建自己的标头,包括包含保护中的库标头:
// FixedHeader.h
#ifndef HEADER_H_
#define HEADER_H_
#include "header.h"
#endif
然后#include "FixedHeader.h"
.但我会放弃图书馆,认真的。
如果您无法修改头文件以包含保护,则有 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(
相关文章:
- 使用mongocxx驱动程序时包含头文件问题
- 如何为包含头文件的目标编写生成文件?
- 如何在 CMakeLists.txt Qt Creator 中包含头文件?
- 当包含头文件的文件不在根项目文件夹中时,如何包含它
- 在生成文件先决条件中包含头文件的原因
- My Project的属性配置正确,但Visual Studio仍然无法打开包含头文件
- 在 PostgreSQL C 扩展中包含头文件
- 是否可以在C++中以间接方式包含头文件
- 是否需要包含头文件?
- 如何在不包含完整的文件系统头的情况下使用文件系统的类路径C++17?
- 我收到未声明的标识符错误,但我已包含头文件?
- 为什么我们需要构建一个提升库,仅仅包含头文件还不够吗,因为提升是模板
- C++:当顺序真正重要时,如何保证在项目中包含头文件的顺序
- 如何在C++中包含头文件时错误地重载
- 我在C++中无效使用不完整的类型类错误,如何正确包含头文件?
- 虚幻引擎4.16,C++包含头文件
- C++多次包含头文件
- 令牌之前的预期类名 '{' - 包含头文件和 CPP 文件
- 可以将标头文件包含在多个源文件中,而无需重复保护
- 有条件地将文件包含在C++标头中