我的代码如下所示:
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()
{
}
答案 0 :(得分:2)
逻辑上这样想:
如果您从未致电myFunc()
,则未定义myClass::a
。所以它必须在全球范围内。
在您的第一个代码段中,即使没有定义它,您也可以使用myClass::a
,因此不允许这样做,以前的语法无效C ++ 。
答案 1 :(得分:1)
静态变量必须在程序启动之前初始化,因此如果在函数中初始化它,则有可能根本不会初始化它。因此编译器应将此作为错误。静态变量在编译时分配(在程序运行之前)。希望这有帮助。
答案 2 :(得分:0)
如果在函数中定义静态成员数据,则它的链接是函数内部的。它们所需的联系是全球性的。