2010-08-09 139 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; 

的*标识符(包括类范围分辨率)之前应该会出现。