2012-03-12 82 views
-1

我有一個類繼承自一個單身繼承的模板的系統。鏈接錯誤與嵌套模板

問題是靜態成員* ms_Singleton *無法在我的課程的專業化版本中正確鏈接。 我收到以下錯誤:

error LNK2001: unresolved external symbol "protected: static class 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

只要改變

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

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

檢查http://ideone.com/7B0Da

+0

Thanx Pawel !!它在我的示例項目中就像一個魅力!我會盡力在我的大項目中實現它。 :) – matt 2012-03-12 15:31:50

+1

@zmatz很高興聽到這一點。請接受答案 - 左邊的點應該有一些綠色的ok標誌。 – 2012-03-12 15:48:11