【问题标题】:Are variables in a header file global scope?头文件中的变量是全局范围吗?
【发布时间】:2013-11-19 07:34:14
【问题描述】:

假设我有一个头文件来存储一个枚举:

my_enum.h:

#ifndef my_enum_h
#define my_enum_h
enum my_enum {ONE, TWO};
#endif

然后我将这个头文件包含在文件game.hgame.cc 中。最后,我将game.h 包含在main.cc 中。

我现在可以在main.cc 中使用一和二。全局定义这些变量是否正常?

【问题讨论】:

  • 我不明白。只需从文件中注释掉这一行。
  • As main.cc includes game.h,其中 includes my_enum.h - 这是正常的(从技术上讲,include 指令被文件的内容替换,即包括)。如果你想隐藏enum,在源文件中定义,可以吗?还是在头文件中也用到了?
  • 如果你不想的话,把所有这些行都注释掉。

标签: c++ header enums


【解决方案1】:

在 main.cc 中包含 game.h 时,因为 game.h 已经包含 my_enum.h,所以可以从包含 game.h 的文件以及包含 my_enum.h 的文件中访问它

解决方案 1: 从您的代码中删除“#include my_enum.h”,因为它似乎不需要

解决方案 2: 也许改变枚举的名称/里面的值

【讨论】:

  • 谢谢!虽然我现在更聪明更聪明了,但这在当时帮助了我。我真的在寻找将enum 封装在namespace 中,如下所示:namespace my_enum { enum e {ONE, TWO}; };
【解决方案2】:

如果您在实现文件中包含标头。这和在你的实现文件中写头文件的确切代码是一样的。

因此,此 enum 声明将包含在您的 game.h 中,随后将包含在您的 main.cc 中。

如果你想删除它,你必须把它从头文件中删除,并在你想使用它的地方声明它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多