【问题标题】:How can I use a global variable in C++?如何在 C++ 中使用全局变量?
【发布时间】:2013-12-06 09:55:29
【问题描述】:

我正在开发一个 Blackberry 10 移动应用程序。使用momentics IDE(BB Native SDK)。

在我的应用程序中,我想使用许多类共享的全局变量。

我尝试了link 中描述的下面的代码,但是当我在变量“g_nValue*”在“.h”文件中,它返回错误“为'g_nValue'指定的存储类”

*/global.cpp:

// declaration of g_nValue
int g_nValue = 5;

*/global.h:

#ifndef GLOBAL_H // header guards
#define GLOBAL_H

// extern tells the compiler this variable is declared elsewhere
extern int g_nValue;

#endif

有人对此有想法吗?我搜了很多,他们都说extern指令应该不会造成任何麻烦。

【问题讨论】:

  • 代码看起来正确。谷歌搜索这个错误,它可能看起来像you have a syntax error elsewhere in the file
  • 这是您的整个global.h 文件吗?在包含 global.h 之前包含什么?我怀疑缺少分号。

标签: c++ c qt qml blackberry-10


【解决方案1】:

extern 的替代方法是类中的静态变量:

//.h
struct Globals
{
    static int g_global_var;
};

//.cpp
int Globals::g_global_var = 0;

//usage:
Globals::g_global_var;

【讨论】:

  • 静态成员在 C++ 中不是全局的,每个 .cpp 文件都将拥有自己的变量副本,如 forum 中所述,而不是使用全局变量
  • @user2072762 不正确。命名空间范围内的static 与类范围内的static 不同。
  • 正如简单所说。我不记得我曾经在现代 C++ 代码库中遇到过 extern 的有效用例。
【解决方案2】:

extern 限定符只告诉编译器,“这个符号是在不同的源文件中定义的”——所以符号存在,使用它是安全的。如果您实际上“撒谎”并且没有定义符号,您将收到链接错误 - 但这是另一回事。

您向我们展示的代码似乎没有任何问题。 但这里有一个link,它可能会帮助您更好地了解...

【讨论】:

  • 也许您可以对链接包含的信息内容做一个简短的“回顾” - 我们不知道该链接将工作多长时间,并且您的答案与其他网站内的信息相关
【解决方案3】:

您没有在定义它的编译单元中声明变量exteren。如果您想在其中使用它,您只需声明它extern(并且不要定义它)其他.cpp 文件(编译单元)。

【讨论】:

  • 对不起!!但我不明白你的回答。你能解释更多吗?
  • 这正是 OP 正在做的事情:声明使用extern(在标题中)的变量,并且定义它没有extern.
  • 在与变量定义相同的翻译单元中为变量声明extern 非常好。事实上,我认为让定义变量的文件还包含声明它的标头extern 是一个好习惯,这样您就可以确保标头声明中的类型与实际定义匹配。
【解决方案4】:

您的代码看起来不错。也许您在其他地方有错误。可能extern int g_nValue 之前的一行中缺少分号 (;)。

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多