Объект указателя на функцию, кажется, не существует

Я пишу какую-то библиотеку, которая организует и отслеживает некоторые задачи. Всякий раз, когда вызывается задача nwe, моя библиотека использует указатель функции, указанный в конструкторе. Но когда я пытаюсь вызвать его, я получаю ошибку Symbol not found

В заголовочном файле я объявил это как:

template <class T>
class TaskManager
{
private:
// other variables
T TaskID;  // This is defined like this (just to clear things up)
void (*TaskHandler)(T, TaskManager<T>*);
// some more stuff
};

Я называю это как

template <class T>
void TaskManager<T>::startActualTask()
{
(*TaskManager<T>::TaskHander)(TaskID, this);    // Errors!
}

или же

template <class T>
void TaskManager<T>::startActualTask()
{
TaskManager<T>::TaskHander(TaskID, this);       // Errors!
}

(Удаление TaskManager<T>:: перед «TaskHander (TaskID, это);» не помогло.)

Но он не может найти символ TaskHandler, Неважно, что я пытался до сих пор!

Полная ошибка:

e:\eigene dateien\visual studio 2010\projects\brainstonemod - publish\brainstonemod - publish\TaskManager.cpp(212): error C2039: 'TaskHander': Is no element of 'TaskManager<T>'
with
[
T=int
]
e:\eigene dateien\visual studio 2010\projects\brainstonemod - publish\brainstonemod - publish\TaskManager.cpp(211): At the compiling of the class template of the void TaskManager<T>::startActualTask(void) member function
with
[
T=int
]
e:\eigene dateien\visual studio 2010\projects\brainstonemod - publish\brainstonemod - publish\TaskManager.cpp(73): At the compiling of the class template of the void TaskManager<T>::addTask(Task<T>) member function
with
[
T=int
]
e:\eigene dateien\visual studio 2010\projects\brainstonemod - publish\brainstonemod - publish\TaskManager.cpp(9): At the compiling of the class template of the TaskManager<T>::TaskManager(std::wstring,std::wstring,void (__cdecl *)(T,TaskManager<T> *)) member function
with
[
T=int
]
main.cpp(14): See the Instatiation of the just compiled class template "TaskManager<T>".
with
[
T=int
]

(Я должен был перевести это. Так что это может быть не точным переводом!)

Это также может быть интересно:

template <class T>
TaskManager<T>::TaskManager(wstring title, wstring subtitle, void (*taskHandler)(T, TaskManager<T>*)) :
// Some intatiations
{
TaskHandler = taskHandler;
// More contructor stuff
}

Как я могу решить это?

0

Решение

Если это обычный член, который является указателем на функцию (как это выглядит в объявлении вашего класса), вы должны вызвать его следующим образом:

template <class T>
void TaskManager<T>::startActualTask()
{
TaskHandler(TaskID, this);
}

Вы используете только TaskManager<T>:: префикс для статический члены или typedefs.

0

Другие решения

Это опечатка. Я написала это TaskHander но это TaskHandler (Я забыл l)

В любом случае, спасибо!

0

По вопросам рекламы [email protected]