C++中单例使用 无法通过Link,请教一下达人们

百分百好牛 2012-01-11 11:35:34
下面的代码放在头文件里面
class CSingleton
{
public:
static CSingleton * GetInstance()
{
if (m_pInstance == NULL)
m_pInstance = new CSingleton();
return m_pInstance;
}
private:
CSingleton(){};
static CSingleton * m_pInstance;
};

main.cpp引用上面的头文件,然后在main函数里面调用
CSingleton *cs = CSingleton::GetInstance();

结果报错Link错误
error LNK2001: unresolved external symbol "private: static class demo::CSingleton * demo::CSingleton::m_pInstance" (?m_pInstance@CSingleton@demo@@0PAV12@A)

整了半天,也没有整好。把CSingleton *cs = CSingleton::GetInstance();这一句删除掉,就能够通过。但是我还是需要用这个单例呢。

...全文
90 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cunsh 的回复:]

static CSingleton * m_pInstance; // 声明的这个静态对象. 没有定义

cpp文件中加上:
CSingleton * CSingleton::m_pInstance = null;
[/Quote]
cunsh 2012-01-11
  • 打赏
  • 举报
回复
static CSingleton * m_pInstance; // 声明的这个静态对象. 没有定义

cpp文件中加上:
CSingleton * CSingleton::m_pInstance = null;
百分百好牛 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cunsh 的回复:]

static CSingleton * m_pInstance; // 声明的这个静态对象. 没有定义

cpp文件中加上:
CSingleton * CSingleton::m_pInstance = null;
[/Quote]
兄弟说得真对。问题是,网上所有的c++单例的例程里,都没有提到这个。
整死了。
谢谢!
only_lonely 2012-01-11
  • 打赏
  • 举报
回复
一般都是在全局和静态变量上,局部变量木有那么多讲究。
only_lonely 2012-01-11
  • 打赏
  • 举报
回复
有声明之后必须要有定义,除非不引用,否则就是link错误。
Kimshuen 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 only_lonely 的回复:]
c++ 对象声明之后必须定义。
[/Quote]
应该是静态对象声明之后必须定义吧。
only_lonely 2012-01-11
  • 打赏
  • 举报
回复
c++ 对象声明之后必须定义。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧