Ошибка связи с вложенными шаблонами - PullRequest
0 голосов
/ 12 марта 2012

У меня есть система классов, которая наследуется от шаблона, который сам наследует от Singleton.

Проблема в том, что статический член * ms_Singleton * не может быть правильно связан в специализированной версии моего класса,И я получил следующую ошибку:

ошибка LNK2001: неразрешенный внешний символ "защищен: статический класс MyBase * Singleton> :: ms_Singleton"

Мой код:

template <typename T> 
class Singleton
{
protected:
    static T* ms_Singleton;

public:
    Singleton( void )
    {
        ms_Singleton = static_cast< T* >( this );
    }
    static void init(void){};
    static T& getSingleton( void )
    {   assert( ms_Singleton );  return ( *ms_Singleton ); }
};



template <class T>
class MyBase : public Singleton< MyBase<T> >
{
    public:
        MyBase()
        {
        }
};


/*template <class T>
MyBase<T>* Singleton< MyBase<T> >::ms_Singleton = 0;*/

class MySpecialized : public MyBase<MySpecialized >
{
    public:
        MySpecialized()
        {
        }
};

template <>
MySpecialized* Singleton<MySpecialized>::ms_Singleton = 0; 

int main()
{
    MySpecialized t;
}

1 Ответ

1 голос
/ 12 марта 2012

Просто изменить

template <class T>
Base<T>* Singleton< Base<T> >::ms_Singleton = 0;

до

template <class T>
T* Singleton<T>::ms_Singleton = 0;

Чек http://ideone.com/7B0Da

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...