2010-08-09 5 views
0

Как я могу использовать элемент указателя статической функции в шаблоне моего класса?Элемент указателя статической функции в шаблоне класса

Я работаю с C++ в Visual Studio, и мой код выглядит примерно следующим образом:

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

Не то, чтобы это решило вашу ошибку компилятора, но помните, что шаблоны + заголовки не так хорошо смешиваются. Вы должны включить реализацию в каждую единицу перевода, в которой вы используете шаблон. –

+0

Спасибо Merlyn, но у меня все есть в моем заголовке. –

ответ

3

Изменить положение * так что это

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

иначе вы пытаетесь определить пространство имен уровня переменной mFunctionPointer в качестве члена указателя на классе ClassTemplate.

1

Преобразование определение этому:

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

Символ * должен появиться перед идентификатором (в том числе разрешения области видимости класса).