函数指针对象似乎不存在

Function pointer object seems not to to exist

本文关键字:不存在 对象 指针 函数      更新时间:2023-10-16

我正在编写某种库,用于组织和跟踪一些任务。每当调用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!
}

(删除´TaskHander前面的TaskManager<T>::(TaskID,this);´没有帮助。)

但是它找不到符号CCD_ 3。不管我到目前为止做了什么!

完整错误为:

e:eigene dateienvisual studio 2010projectsbrainstonemod - publishbrainstonemod - publishTaskManager.cpp(212): error C2039: 'TaskHander': Is no element of 'TaskManager<T>'
          with
          [
              T=int
          ]
          e:eigene dateienvisual studio 2010projectsbrainstonemod - publishbrainstonemod - publishTaskManager.cpp(211): At the compiling of the class template of the void TaskManager<T>::startActualTask(void) member function
          with
          [
              T=int
          ]
          e:eigene dateienvisual studio 2010projectsbrainstonemod - publishbrainstonemod - publishTaskManager.cpp(73): At the compiling of the class template of the void TaskManager<T>::addTask(Task<T>) member function
          with
          [
              T=int
          ]
          e:eigene dateienvisual studio 2010projectsbrainstonemod - publishbrainstonemod - publishTaskManager.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>::前缀用于静态成员或typedef。

这是一个拼写错误。我把它拼写成TaskHander,但它是TaskHandler(我忘了l

无论如何,谢谢你!