2011-03-13 114 views
6

我似乎無法在完全專門化的類模板中初始化一個靜態成員!在完全專門化的類模板中初始化一個靜態成員

我試圖做到以下幾點:

template<typename Type> 
class X 
{ 
}; 

template<> 
class X<int> 
{          
    public: 

    static int Value; 
} 

,但我似乎無法初始化靜態成員,我什麼都試過,如:

template<> 
int X<int>::Value = 0; 

它不能編譯,所以任何關於如何實際執行此操作的指針都會很好;)

編輯:下面的答案是正確的,但您還需要將init放在.cpp文件中,而不是放在標頭f ILE。

感謝您的時間, 理查德。

回答

6

,同時限定Value因爲template<>在明確專業類的成員定義是不允許[X<int>在這種情況下]不要使用template<>。而且您以後}

works for me缺少一個分號:

template<typename Type> 
class X 
{ 
}; 

template<> 
class X<int> 
{          
    public: 

    static int Value; 
}; 

int X<int>::Value = 0; 
+0

「模板<>中明確專業類的成員定義是不允許的」 - 很高興知道,謝謝! – Xeo 2011-03-13 13:10:07

+0

謝謝,通過刪除模板<>並將init放入.cpp文件(我通過你的例子)。我現在可以編譯它。謝謝! – Richard 2011-03-13 14:00:12