哪个范围有静态变量?

时间:2011-02-19 20:46:17

标签: c++ static

我正在编写一个设置很少的简单程序。这些设置是在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仍然是setting1setting1 == 10)的旧值。

虽然setting1是全局静态,但其值无法更改?为什么呢?

1 个答案:

答案 0 :(得分:6)

如果在头文件中将名称空间范围变量声明为static,然后将该头文件包含在多个源文件中,则每个源文件中将包含该变量的一个实例。 static名称空间范围变量具有内部链接。

您有几个选择:

  • 在其中一个.cpp文件中声明变量

  • 在头文件中将变量声明为extern,然后仅在其中一个.cpp文件中定义

  • 使用静态成员变量并在一个.cpp文件中定义