2012-06-10 61 views
0

我定义我的函数指针与一个typedef像函数指针的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 

希望有人能够帮助我短:)格尔茨

+1

当你想在这里复制的错误信息,请运行在英语语言环境的环境中你的编译器它应该工作。 –

回答

4

runner需要声明返回void,不返回ThreadFuncstart匹配的签名。

+0

工作:)谢谢 – Roby

3
ThreadFunc runner(void *job) 

实际上不是ThreadFunc,但函数返回一个ThreadFunc。编译器基本上是在告诉你。

,如果你声明的功能

void runner(void *job) 
+0

*实际上是一个函数返回一个ThreadFunc,而不是一个ThreadFunc。* ....什么? – Nawaz

+0

@Nawaz:我认为他的意思只是表示函数返回'ThreadFunc'而不是'* ThreadFunc'类型。 –

+0

@Nawaz:很好。做得更清楚。 – jpalecek