Ash*_*ban 2 c++ static static-members
我今天早些时候提出了一个关于单身人士的问题,我在理解遇到的一些错误时遇到了一些困难.我有以下代码:
class Timing {
public:
static Timing *GetInstance();
private:
Timing();
static Timing *_singleInstance;
};
Run Code Online (Sandbox Code Playgroud)
#include "Timing.h"
static Timing *Timing::GetInstance() { //the first error
if (!_singleInstance) {
_singleInstance = new Timing(); //the second error
}
return _singleInstance;
}
Run Code Online (Sandbox Code Playgroud)
这段代码中有两个错误,我无法弄清楚.
该方法GetInstance()
在标头中声明为static.为什么在cpp文件中我必须省略这个词static
?它给出了错误:"无法声明成员函数'静态时序*Timing :: GetInstance()'具有静态链接".写它的正确方法是:
Timing *Timing::GetInstance() { ... }
Run Code Online (Sandbox Code Playgroud)为什么我不能写_singleInstance = new Timing();
?它给出了错误:"对Timing :: _ singleInstance的未定义引用".我通过_singleInstance
在cpp文件中定义为全局变量来解决此错误.
1:静态意味着"本地链接"用于类声明之外的函数声明/定义.
本地链接意味着特定函数只能从此特定文件中的代码引用,并且对于类中的方法没有多大意义.
2:由于您的类声明可以多次包含,因此应该在cpp文件中定义静态成员的实际存储:
#include "Timing.h"
Timing* Timing::_singleInstance;
Timing *Timing::GetInstance() { //the first error
if (!_singleInstance) {
_singleInstance = new Timing(); //the second error
}
return _singleInstance;
}
Run Code Online (Sandbox Code Playgroud)