2010-08-09 140 views
0

如何在我的類模板中使用靜態函數指針成員?類模板中的靜態函數指針成員

我在Visual Studio C++的工作,和我的代碼看起來類似於以下內容:

template<typename T> 
class ClassTemplate 
{ 
public: 
    static T* CallIt() { return ClassTemplate<T>::mFunctionPointer(); } 

private: 
    static T* (*mFunctionPointer)(); 
}; 

當我編譯我得到一個「無法解析的外部符號」錯誤。我想我應該做這樣的事情外的類聲明:

template<typename T> 
T* (ClassTemplate<T>::*mFunctionPointer)() = NULL; 

不幸的是後來我拿到C2998,「不能是模板定義」。

任何想法?

+0

這不是說這可以解決你的編譯器錯誤,但要記住,模板+頭文件混合不好。您必須在您使用該模板的每個翻譯單元中包含該實施。 – 2010-08-09 21:00:15

+0

感謝Merlyn,但我確實在我的標題中包含了所有內容。 – 2010-08-09 21:05:27

回答

3

更改*的位置,使得它的

template<typename T> 
T* (*ClassTemplate<T>::mFunctionPointer)() = NULL; 

否則你正試圖定義一個名字空間級變量mFunctionPointerClassTemplate類的指針到成員。

1

將您的定義是:

template<typename T> 
T* (*ClassTemplate<T>::mFunctionPointer)() = NULL; 

的*標識符(包括類範圍分辨率)之前應該會出現。