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
。如果它打算在我自己的工作之外使用,我也会在它前面加上项目名称。