C++ 全局函数中静态成员的初始化
我的代码如下所示:C++ 全局函数中静态成员的初始化,c++,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; vo
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()
{
}
如果在函数中定义静态成员数据,则其链接是函数的内部链接。它们所需的链接是全局的。从逻辑上来说,可以这样想:
class myClass{
public:
static int a;
};
void myFunc()
{
int myClass::a = 1;
}
如果从未调用myFunc()
,则未定义myClass::a
。因此,它必须在全球范围内
在您的第一个代码段中,您可能会使用
myClass::a
,即使没有定义它,因此它是不允许的,并且以前的语法无效C++静态变量必须在程序启动之前初始化,因此如果您在函数中初始化它,它可能根本不会被初始化。因此编译器应该将此设置为错误。静态变量在编译时分配(在程序运行之前)。希望有帮助。请参阅以获取解释。因为这不仅仅是一个初始化,它也是一个内存分配。只有在int
s的情况下,您可以忽略内存分配,并通过删除int
来使用第一个代码,以便能够在函数内部对其进行初始化。从“int myClass::a=1;”中删除“int”