2012-06-10 59 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