种成员在链接时找不到

类成员在链接时找不到首先是一个singleton模板基类,有个类成员装有实例的地址:C/C++ code#ifndef SINGLETO

类成员在链接时找不到
首先是一个singleton模板基类,有个类成员装有实例的地址:

C/C++ code
#ifndef SINGLETON_H#define SINGLETON_Htemplate <typename T> class Singleton {public:        static T* instance;        static T& getInstance()    {        return *instance;    }        static T* getInstancePtr()    {        return instance;    }    Singleton()    {        instance = static_cast <T*> (this);    }    protected:    Singleton(const Singleton<T>&);    Singleton& operator=(const Singleton<T> &);        };#endif // SINGLETON_H


然后一个简单的FooBar类
C/C++ code
#include "singleton.h"class FooBar: public Singleton<FooBar>{public:    FooBar():foo(1),bar(2) {}    int foo;    int bar;};FooBar obj();int main() {    FooBar::getInstance();}

主程序的代码编译可以过,但链接时提示找不到“Singleton<FooBar>::instance”这个东西。我应当怎样做?

[解决办法]
基础语法不熟啊,要补课啊。
static成员要在类外实现啊。
[解决办法]
template <class T>
T* Singleton<T>::instance = new Singleton<T>();
[解决办法]
静态成员变量需要在类外部进行定义:

C/C++ code
template <typename T> class Singleton {public:        static T* instance;        static T& getInstance()    {        return *instance;    }        static T* getInstancePtr()    {        return instance;    }    Singleton()    {        instance = static_cast <T*> (this);    }    protected:    Singleton(const Singleton<T>&);    Singleton& operator=(const Singleton<T> &);        };template <class T>T* Singleton<T>::instance = new Singleton<T>(); // 定义静态成员///////////////////////////////////。。。Singleton模板实现放在此处。。。
[解决办法]
探讨
template <class T>
T* Singleton<T>::instance = new Singleton<T>();