如何在C ++中声明全局variables
我知道一个人不应该使用全局variables,但我需要他们。 我已经读过任何在函数外部声明的variables是一个全局variables。 我已经这样做了,但在另一个* .cpp文件中找不到该variables。 所以这不是全球性的。 是不是这样,人们必须创build一个头文件GlobalVariabels.h并将该文件包含到任何其他使用它的* cpp文件?
我已经读过任何在函数外部声明的variables是一个全局variables。 我已经这样做了,但在另一个* .cpp文件中找不到该variables。 所以这不是全球性的。
根据范围的概念,你的variables是全局的。 但是,您阅读/理解的内容过于简单。
可能性1
也许你忘了在另一个翻译单元(TU)中声明variables。 这是一个例子:
a.cpp
int x = 5; // declaration and definition of my global variable
b.cpp
// I want to use `x` here, too. // But I need b.cpp to know that it exists, first: extern int x; // declaration (not definition) void foo() { cout << x; // OK }
通常你会把extern int x;
在包含在b.cpp中的头文件中,也包含在任何其他需要使用x
TU中。
可能性2
此外,variables可能具有内部链接 ,这意味着它不会跨翻译单元显示。 如果variables被标记为const
( [C++11: 3.5/3]
),则默认情况下是这种情况:
a.cpp
const int x = 5; // file-`static` by default, because `const`
b.cpp
extern const int x; // says there's a `x` that we can use somewhere... void foo() { cout << x; // ... but actually there isn't. So, linker error. }
您也可以通过将extern
应用于定义来解决此问题:
a.cpp
extern const int x = 5;
这整个malarky大致相当于你在TU边界使function可见/可用的混乱,但在你如何去做它有一些差异。
你在一个通用的头文件中声明variables为extern
:
//globals.h extern int x;
并在一个实现文件中定义它。
//globals.cpp int x = 1337;
然后,您可以在需要访问的地方包含标题。
我build议你也将这个variables包含在一个namespace
。
除了这里的其他答案,如果该值是一个整数常量,类或结构中的公共枚举将起作用。 variables – 常量或其他 – 在名称空间的根部是另一个选项,或者类或结构的静态公共成员是第三个选项。
MyClass::eSomeConst (enum) MyNamespace::nSomeValue MyStruct::nSomeValue (static)