Я пишу какую-то библиотеку, которая организует и отслеживает некоторые задачи. Всякий раз, когда вызывается задача 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
}
Как я могу решить это?
Если это обычный член, который является указателем на функцию (как это выглядит в объявлении вашего класса), вы должны вызвать его следующим образом:
template <class T>
void TaskManager<T>::startActualTask()
{
TaskHandler(TaskID, this);
}
Вы используете только TaskManager<T>::
префикс для статический члены или typedefs.
Это опечатка. Я написала это TaskHander
но это TaskHandler
(Я забыл l
)
В любом случае, спасибо!