种成员在链接时找不到

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

#ifndef SINGLETON_H
#define SINGLETON_H

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> &);
    
    
};

#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>();