我正在编写一个设置很少的简单程序。这些设置是在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
是全局静态,但其值无法更改?为什么呢?
答案 0 :(得分:6)
如果在头文件中将名称空间范围变量声明为static
,然后将该头文件包含在多个源文件中,则每个源文件中将包含该变量的一个实例。 static
名称空间范围变量具有内部链接。
您有几个选择:
在其中一个.cpp文件中声明变量
在头文件中将变量声明为extern
,然后仅在其中一个.cpp文件中定义
使用静态成员变量并在一个.cpp文件中定义