C++ 如何包含具有相同包含的多个类?

C++ 如何包含具有相同包含的多个类?,c++,class,include,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 // c

如何包含两个都具有
#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
第二次包含时,它实际上是一个空文件


有许多不同的方法选择标识符
包括这里的\u GUARD\u identifier\u GOES\u
,每个方法都有各自的原理。就我个人而言,我做
文件\目录\文件\名称\类/函数\名称\ HPP

#ifndef UTILITY_FOO_HPP
#define UTILITY_FOO_HPP

namespace utility
{
    void foo();
}

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

INCLUDE_GUARD_A629F54A136C49C9938CB33EF8EDE676

这几乎保证了它不会相撞。最终,这取决于你。但是,不管你想出了什么,都要确保它是这样的:任何地方都不能有双下划线,也不要以下划线后跟大写字母开头。

规则“不带下划线后跟大写字母”只适用于标识符的开头。“这几乎保证了它永远不会冲突”-嗯,那一个不会,现在您已将其发布在互联网上;-)@史蒂夫:哈哈。我偷了那个只是为了记录,GCC,VisualC++等支持了“一次一次”,做同样的事情。我不是推荐它,只是提一下,让读者在遇到它时了解它的用途。@calccrypto:随你怎么想。对于我的项目,文件是根据这些内容命名的,我将事情保持非常清晰;很少有文件(如果有的话)具有多个函数或类。对我来说,你的问题是“是的”。)我还将它们放入与它们所在的文件夹相匹配的命名空间中。因此,文件
/utility/blah.hpp
包含一个类似于
名称空间实用程序{void blah();}
的函数(或类),带有保护
utility_blah_hpp
。如果它打算在我自己的工作之外使用,我也会在它前面加上项目名称。