Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 全局函数中静态成员的初始化_C++ - Fatal编程技术网

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”