如何在 C++ 中使用全局变量?

Posted

技术标签:

【中文标题】如何在 C++ 中使用全局变量?【英文标题】:How can I use a global variable in 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 之前包含什么?我怀疑缺少分号。 【参考方案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 之前的一行中缺少分号 (;)。

【讨论】:

以上是关于如何在 C++ 中使用全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

c++多个文件中如何共用一个全局变量

如何引用与 C++ 中的局部变量同名的全局变量?

如何在 Visual C++ 中将托管变量用作全局变量?

QT如何设置可变的全局变量

C++中的全局变量普通局部变量和静态局部变量的区别

如何在 Visual Studio 的监视窗口(用于 C++)上列出和查看所有全局变量?