单件类运行时错误问题。。代码很短。。路过好心人帮帮忙
单件类问题。。路过的大大帮帮忙啊~~~
写一个单件类,编译通过运行时提示:
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;}#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;}