我正在编写一个简单的程序,只有很少的设置。这些设置是 config.h
头文件中定义的静态变量。
例如,在 config.h
中:
static int setting1 = 10 ;
在另一个文件 kkk.cpp
中,我有一个函数可以更改 setting1
的值:
void classA::functionA()
{
setting1=5;
classB.functionB();
}
但是,在classB.functionB
中,它是在文件eee.cpp
下定义的
void classB::functionB()
{
int hh=setting1;
printf("%d",hh);
}
hh
仍然是 setting1
的旧值 (setting1 == 10
)。
虽然setting1
是全局静态的,但它的值不能改变?为什么?
最佳答案
如果您在头文件中将 namespace 范围变量声明为 static
,然后将该头文件包含在多个源文件中,则每个源文件中都会有该变量的一个实例包括。 static
命名空间范围变量具有内部链接。
您有几个选择:
在 .cpp 文件之一中声明变量
在头文件中将变量声明为
extern
,然后仅在一个 .cpp 文件中定义它使用静态成员变量并将其定义在一个 .cpp 文件中
关于c++ - 哪个范围有静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053412/