在全局函数内初始化静态成员

时间:2014-04-30 05:46:11

标签: c++

我的代码如下所示:

class myClass{
    public:
        static int a;
};

void myFunc()
{
    int myClass::a = 1;
}

我看到以下编译错误 错误C2655:' myClass :: a' :在当前范围内定义或重新声明非法

我做了以下更改,一切都很顺利。有什么想法吗?

class myClass{
    public:
        static int a;
};

int myClass::a = 1;
void myFunc()
{
}

3 个答案:

答案 0 :(得分:2)

逻辑上这样想:

如果您从未致电myFunc(),则未定义myClass::a。所以它必须在全球范围内。

在您的第一个代码段中,即使没有定义它,您也可以使用myClass::a,因此不允许这样做,以前的语法无效C ++

答案 1 :(得分:1)

静态变量必须在程序启动之前初始化,因此如果在函数中初始化它,则有可能根本不会初始化它。因此编译器应将此作为错误。静态变量在编译时分配(在程序运行之前)。希望这有帮助。

答案 2 :(得分:0)

如果在函数中定义静态成员数据,则它的链接是函数内部的。它们所需的联系是全球性的。