【问题标题】:how do i include multiple class with the same includes?我如何包含具有相同包含的多个类?
【发布时间】:2011-05-06 23:10:55
【问题描述】:

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

我有:

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

【问题讨论】:

    标签: c++ class include


    【解决方案1】:

    使用包含守卫:

    #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:任何地方都没有双下划线,并且不要以下划线后跟大写字母开头。

    【讨论】:

    • 规则“无下划线后跟大写”仅适用于标识符的开头。
    • “这几乎可以保证它永远不会发生碰撞” - 嗯,那个不会,现在你已经将它发布到互联网上 ;-)
    • @Steve:哈哈。我偷了那个from Pate。 :)
    • 仅供记录 - gcc、visual c++ 等支持执行相同操作的“#pragma once”。我不推荐它 - 只是提到它,以便读者在遇到它时了解它的目的。
    • @calccrypto:随便你。对于我的项目,文件以其中的内容命名,并且我保持非常不同;很少有文件(如果有的话)有多个函数或类。所以你的问题,对我来说,是“是的”。 :) 我还将它们放入与它们所在的文件夹匹配的命名空间中。因此文件./utility/blah.hpp 包含类似于namespace utility { void blah(); } 的函数(或类),带有保护UTILITY_BLAH_HPP。如果它打算在我自己的工作之外使用,我也会在它前面加上一个项目名称。
    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2016-12-04
    • 2014-08-25
    • 2020-02-25
    • 2017-09-09
    相关资源
    最近更新 更多