#include<iostream>
#include<string>
using namespace std;
class Singleton
{
private:
Singleton(){};//这里声明了一个构造,则必须要有{}实现方法体,不然会报错symbol错误
//~Singleton(void); //不显式声明的话,默认会带有析构函数
static Singleton* instance; //不能在这里直接赋值,不然会报pure的错误
public:
static Singleton* getIntance();
};
Singleton* Singleton::instance = NULL;
//外部显式的书写getIntance方法,也可以在类里面内联函数方法体
Singleton* Singleton::getIntance(){
if(instance == NULL )
{
instance = new Singleton();
}
return instance;
};
//Singleton::Singleton() {
//}
void main()
{
//直接new一个Singleton,是会报错的
//Singleton sin = new Singleton();
//
Singleton* sin = Singleton::getIntance();
Singleton* sin1 = Singleton::getIntance();
if(sin == sin1)
{
cout<<"same"<<endl;
}
};
写单例的时候,出现的错误整理
错误说明:
pure specifier can only be specified for functions
错误位置:
static Singleton* instance = NULL;
错误解决:
static Singleton* instance;
Singleton* Singleton::instance = NULL;
错误反思:
静态变量不能直接在类里面赋值。
必须到类外面进行赋值
错误说明:
error C2275: 'Singleton' : illegal use of this type as an expression
错误位置:
Singleton* sin = Singleton.getIntance();
错误解决:
Singleton* sin = Singleton::getIntance();
错误反思:
似乎是由于.号无法识别到static定义的方法,该问题还未完全解决。
错误说明:
error LNK2001: unresolved external symbol "private: __thiscall Singleton::Singleton(void)" (??0Singleton@@AAE@XZ)
错误位置:
Singleton();
错误解决:
Singleton(){};
错误反思:
对于声明的构造函数体,C++内必须具备{}方法体,不然会出现此错误。