class Singleton
{
private:
static Singleton* m_instance;
Singleton() {}
public:
static Singleton* getInstance();
};
Singleton* Singleton::getInstance()
{
if (m_instance==nullptr)
{
if (m_instance==nullptr)
{
m_instance = new Singleton;
}
}
return m_instance;
}
vs报错:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2001 无法解析的外部符号 "private: static class Singleton * Singleton::m_instance" (?m_instance@Singleton@@0PAV1@A) billapp C:\Users\Administrator\Documents\Visual Studio 2015\Projects\billapp\billapp\bill.obj 1
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 _main,该符号在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用 billapp C:\Users\Administrator\Documents\Visual Studio 2015\Projects\billapp\billapp\MSVCRTD.lib(exe_main.obj) 1
为什么会不通过?
需要在类声明外加上一句
Singleton * Singleton::m_instance = 0;
否则会有链接错误
错误可能跟静态成员的声明有关。
另外,单例模式可以使用局部静态变量的引用实现。参考这里。