我正在写一些组织和跟踪某些任务的图书馆。每当调用一个nwe任务时,我的libary都会使用构造函数中给出的函数指针。但是当我尝试调用它时,我收到错误Symbol not found
在Header文件中,我将其声明为:
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!
}
(删除'TaskHander(TaskID,this)前面的TaskManager<T>::
;'没有帮助。)
但它无法找到符号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 :(得分:0)
如果它是一个普通的成员,它是一个函数指针(它在你的类声明中似乎是这样),你应该这样称呼它:
template <class T>
void TaskManager<T>::startActualTask()
{
TaskHandler(TaskID, this);
}
您只对静态成员或typedef使用TaskManager<T>::
前缀。
答案 1 :(得分:0)
这是一个错字。我拼写了TaskHander
,但它是TaskHandler
(我忘记了l
)
谢谢你!