我对全局变量有些麻烦。我的任务是在头文件中定义一个全局变量,其值可以在其他文件中更新。如果我修改文件中的全局变量的值,我希望在所有其他文件中可以看到此更新的值。
例如,让我说我有4个文件:main.cpp constants.h server.h和server.cpp。
我希望int类型的全局变量调用myVar。
static int myVar=0;
我包含头文件,我调用在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();
我包含常量头文件并实现myFuntion()
#include "constants.h"
void myFunction()
{
cout<<"myVar in server.cpp is:"<<myVar<<"\n"; //prints 0 not 3!!!
}
问题是myVar在这里是0而我希望它是3!
答案 0 :(得分:5)
如果您将变量定义为static
,则意味着变量的范围是文件本身,或者在其他世界中,将为您在其中包含的每个文件创建变量你的头文件。因此main.cpp
和server.cpp
都会有自己的myVar
变量实例。
您可以在main.cpp
中声明变量,并使用extern关键字访问此变量:
// In main.cpp
int myVar = 0;
// In server.cpp
extern int myVar;
另一个解决方案是将extern声明放在标题中,这样您就可以访问包含标题的每个文件中的变量。在头文件中将变量声明为extern int var
并在包含标题的文件中声明变量int var
时没有冲突。