单件类运行时错误问题。。代码很短。。路过好心人帮帮忙

baomaxiangche852 2012-04-11 10:19:25
单件类问题。。路过的大大帮帮忙啊~~~

写一个单件类,编译通过运行时提示:
1>------ 已启动生成: 项目: 单件类, 配置: Debug Win32 ------
1>正在链接...
1>main.obj : error LNK2001: 无法解析的外部符号 "protected: static class A * Singleton<class A>::ms_Singleton" (?ms_Singleton@?$Singleton@VA@@@@1PAVA@@A)
1>E:\程序\数据结构与STL复习\单件类\Debug\单件类.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>生成日志保存在“file://e:\程序\数据结构与STL复习\单件类\单件类\Debug\BuildLog.htm”
1>单件类 - 2 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========


代码

#include <assert.h>
template <typename T>
class Singleton
{
//private:
/** \brief Explicit private copy constructor. This is a forbidden operation.*/
Singleton(const Singleton<T> &);

/** \brief Private operator= . This is a forbidden operation. */
Singleton& operator=(const Singleton<T> &);

protected:

static T* ms_Singleton;

public:
Singleton( void )
{
assert( !ms_Singleton );
ms_Singleton = static_cast< T* >( this );

}
~Singleton( void )
{ assert( ms_Singleton ); ms_Singleton = 0; }
static T& getSingleton( void )
{ assert( ms_Singleton ); return ( *ms_Singleton ); }
static T* getSingletonPtr( void )
{ return ms_Singleton; }
};

class A:public Singleton<A>
{

};

int main()
{
A* a1=new A();
A* a2=new A();
return 1;
}
...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
惬意 2012-04-11
  • 打赏
  • 举报
回复
把你的类定义完之后再定义成员函数
turing-complete 2012-04-11
  • 打赏
  • 举报
回复
亲,你这个是个链接错误,原因是没有初始化静态成员变量。

#include <cassert>

template<typename T>
class Singleton {
//private:
/** \brief Explicit private copy constructor. This is a forbidden operation.*/
Singleton(const Singleton<T> &);

/** \brief Private operator= . This is a forbidden operation. */
Singleton& operator=(const Singleton<T> &);

protected:

static T* ms_Singleton;

public:
Singleton(void) {
assert( !ms_Singleton);
ms_Singleton = static_cast<T*>(this);

}
~Singleton(void) {
assert( ms_Singleton);
ms_Singleton = 0;
}
static T& getSingleton(void) {
assert( ms_Singleton);
return (*ms_Singleton);
}
static T* getSingletonPtr(void) {
return ms_Singleton;
}
};

template<typename T>
T* Singleton::ms_Singleton = NULL;

class A: public Singleton<A> {

};

int main() {
A* a1 = new A();
A* a2 = new A();
return 1;
}

64,684

社区成员

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

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