我在全局变量方面遇到了一些问题。我的任务是在头文件中定义一个全局变量,其值可以在其他文件中更新。如果我修改了一个文件中全局变量的值,我希望这个更新的值可以在所有其他文件中看到。
例如,假设我有4个文件:main.cpp常量.h server.h和server.cpp.
-
在costants.h中,我希望int类型的全局变量调用myVar。
static int myVar=0;
-
在main.cpp中,我包括头文件,并调用server.cpp 中实现的myFunction
#include "constants.h"
cout<<"myVar is:"<<myVar<<"n"; // prints 0; myVar=3; cout<<"now myVar is:"<<myVar<<"n"; // prints 3; void myFunction(); -
在sever.cpp中,我包含常量头文件并实现myFuntion((
#include "constants.h"
void myFunction() { cout<<"myVar in server.cpp is:"<<myVar<<"n"; //prints 0 not 3!!! }
问题是这里myVar是0,而我希望它是3!
如果将变量定义为static
,则意味着变量的作用域是文件本身,或者在其他世界中,将为包含头文件的每个文件创建一个变量。因此main.cpp
和server.cpp
将各自具有myVar
变量的实例。
您可以在main.cpp
中声明一个变量,并使用extern关键字访问该变量:
// In main.cpp
int myVar = 0;
// In server.cpp
extern int myVar;
另一种解决方案是将extern declaration放在头中,这样您就可以访问包含头的每个文件中的变量。在头文件中将变量声明为extern int var
和在头文件中包含变量的文件中声明变量int var
没有冲突。