如何在 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++ 中使用全局变量?的主要内容,如果未能解决你的问题,请参考以下文章