Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+;中使用全局变量+;?_C++_C_Qt_Qml_Blackberry 10 - Fatal编程技术网

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

C++ 如何在C+;中使用全局变量+;?,c++,c,qt,qml,blackberry-10,C++,C,Qt,Qml,Blackberry 10,我正在开发一款黑莓10手机应用程序。使用momentics IDE(BB原生SDK) 在我的应用程序中,我希望使用许多类共享的全局变量 我尝试了下面的代码,如本文所述,但是当我在.h文件中变量“g\u nValue*”的声明之前添加extern指令时,它返回错误“为“g\u nValue”指定的存储类” */global.cpp: // declaration of g_nValue int g_nValue = 5; */全球.h: #ifndef GLOBAL_H // header gu

我正在开发一款黑莓10手机应用程序。使用momentics IDE(BB原生SDK)

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

我尝试了下面的代码,如本文所述,但是当我在.h文件中变量“g\u nValue*”的声明之前添加extern指令时,它返回错误“为“g\u nValue”指定的存储类”

*/global.cpp:

// declaration of g_nValue
int g_nValue = 5;
*/全球.h:

#ifndef GLOBAL_H // header guards
#define GLOBAL_H

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

#endif

有人对此有想法吗?我搜索了很多,他们都说extern指令应该不会引起任何问题。

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

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

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

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

//usage:
Globals::g_global_var;

你的代码看起来不错。也许你在别的地方有错误。可能在
extern int g_nValue

前面的一行中缺少分号(;)
extern
限定符只告诉编译器,“此符号定义在不同的源文件中”-因此符号存在,使用它是安全的。如果你真的“撒谎”并且没有定义符号,你会得到一个链接错误——但那是另一回事

你给我们看的代码没有任何问题。
但这里有一个可能会帮助您获得更好的想法…

对不起!!但我不明白你的答案。你能解释更多吗?这正是OP所做的:使用
extern
(在标题中)声明变量,并在不使用
extern
的情况下定义它。在变量定义的同一转换单元中为变量声明
extern
是完全正确的。事实上,我认为,定义变量的文件也包括声明它的代码头> ExtNe/COD>是一个很好的做法。因此,您可以确信报头声明中的类型与实际定义相匹配。C++中的静态成员不是全局的,每个.cpp文件都有自己的变量副本,如本文所述,而不是使用全局变量variable@user2072762不对<命名空间范围内的code>static不同于类范围内的
static
。我不记得我曾经在现代C++代码库中遇到过一个有效的用例<代码> ExtNe/COD>。代码看起来正确。在谷歌上搜索这个错误,它可能看起来像。这是你的整个
global.h
文件吗?在包含
global.h
之前包含了什么?我怀疑缺少了分号。也许你可以对链接包含的信息做一个小的“重述”——我们不知道该链接能工作多久,你的答案与另一个网站内的信息有关