0

我用 typedef 定义了我的函数指针

typedef void (*ThreadFunc)( void *);

我的类成员方法如下所示:

 void start( ThreadFunc f, vector<void *> &jobs)

在我的主程序中,我编写了一个函数,例如:

 ThreadFunc runner( void *job )
 {
  printf("->> %p\n", job);
 };

并想运行成员函数,所以我尝试了:

r.start( runner, jobs);

编译器说:

main.cc:27: Fehler: ungültige Umwandlung von »void (* (*)(void*))(void*)« in »void (*)(void*)«
main.cc:27: Fehler:   Argument 1 von »void Thread::start(void (*)(void*), std::vector<void*, std::allocator<void*> >&)« wird initialisiert

希望有人能帮我简短:) greetz

4

2 回答 2

4

runner需要声明为返回void,而不是返回ThreadFunc匹配的签名start

于 2012-06-10T08:44:54.070 回答
3
ThreadFunc runner( void *job )

实际上不是 a ThreadFunc,而是返回 a 的函数ThreadFunc。编译器基本上是在告诉你。

如果您将函数声明为,它应该可以工作

void runner( void *job )
于 2012-06-10T08:46:45.600 回答