在使用C++实现单例模式过程中发现无法在类内定义static变量,于是又去复习了一遍static成员变量:
首先是一个有static成员变量的单例模式的类:
class Cat {
public:
int a;
static Cat* cv;
Cat(){
cout << "new cat!!!" << endl;
}
static void fk();
};
如果在其他地方使用的话就会出现“无法解析的外部符号问题”。因为static变量默认初始化为0,需要在类体外自行初始化变量,不然是无法访问的:
Cat* Cat::cv = nullptr;
但在类定义的下面补充这一句后又出现了“一个或多个多重定义的符号”的错误。
网上找了半天毫无结果,最后发现把这句初始化的语句放在c++文件部分就好了。(意思是将类的定义和实现分成两个文件写的情况下,static成员变量的初始化语句要写在实现那部分)
cpp文件代码如下:
#include "Cat.h"
Cat* Cat::cv = nullptr;
void Cat::fk()
{
//use cv...
}