c++ - 我如何包含具有相同包含的多个类?

标签 c++ class include

如何包含两个都具有 #include "h_file.h" 的 .h/class 文件?两者都需要 .h 文件定义,并且都包含在主程序中。我如何防止重新定义 .h 定义(这会导致编译器无法编译)?

我有:

main.cpp
class1.h/class1.cpp
class2.h/class2.cpp
h_file.h

最佳答案

使用包含守卫:

#ifndef INCLUDE_GUARD_IDENTIFIER_GOES_HERE
#define INCLUDE_GUARD_IDENTIFIER_GOES_HERE

// code for header

#endif

第二次包含它时,它实际上是一个空文件。


选择标识符 INCLUDE_GUARD_IDENTIFIER_GOES_HERE 的方法有很多种,每种方法都有其基本原理。就我个人而言,我执行 FILE_DIRECTORY_FILE_NAME_CLASS/FUNCTION_NAME_HPP:

#ifndef UTILITY_FOO_HPP
#define UTILITY_FOO_HPP

namespace utility
{
    void foo();
}

#endif

其他人将生成 GUID 并将它们附加到基本名称,如下所示:

INCLUDE_GUARD_A629F54A136C49C9938CB33EF8EDE676

这几乎可以保证它永远不会发生碰撞。最终,这取决于你。但是,无论您想出什么,请确保它遵循 the rules : 任何地方都没有双下划线,也不要以下划线后跟大写字母开头。

关于c++ - 我如何包含具有相同包含的多个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129225/

相关文章:

c++ - 如何对动态数组执行操作?

c++ - 如何在 Lua 中处理 C++ 类构造函数失败

android - <include> 标签没有准确显示它的内容

C++ 两个派生类中有彼此的对象(包括问题)

javascript - 在 "inherit"中,我在使用 'return' 代码时遇到问题

C++简单程序错误

c++ - C++ 代码 `x.erase(std::remove(x.begin(), x.end(), ' '), x.end())` 是如何工作的?

c++ - 如何在体素引擎中正确使用 VAO 和 VBO

c++ - 需要有关 C++ vector 用法的示例

java - 当方法名与类名相同时如何实例化嵌套类?