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のではなく、戻ることを宣言する必要があります。ThreadFuncstart

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

は実際にはではありませんがThreadFunc、を返す関数ThreadFuncです。コンパイラは基本的にそれを教えてくれます。

関数を次のように宣言すると機能するはずです

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