2016-07-22 6 views
0

私はクラスメソッドに渡そうとしている関数ポインタを持っています。pthread_createはそのパラメータを渡すために呼び出されます。しかし、私はいくつかの誤りを抱えており、私がここからどこに行くと思うか分からない。 C++は関数ポインタを2回渡して問題を引き起こします

main.cpp:57:29: error: invalid conversion from ‘void* (*)()’ to ‘void (*)(void*)’ [-fpermissive]

私はvoid* (*)(void*)としてそれを渡していますにもかかわらず、理由を説明してください

int IOThreadPool::Task(void* (*FuncPointer)(void*)) 
{ 
    pthread_t NewThread; 

    int rc = pthread_create(&NewThread, NULL, FuncPointer, (void *) (intptr_t) IOThreadPool::Threads.size() + 1); 


void (*FuncPointer)(void*); 
FuncPointer = random_function; 
ThreadPool.Task(FuncPointer); 
は、私が void* (*)()を取得します。私は非常に混乱していて、頭が痛いです!

おかげ

+0

はあなたがあまりにもrandom_functionを提供することができますか?正しい署名がありますか? – Dutow

答えて

1
invalid conversion from ‘void* (*)()’ to ‘void (*)(void*)’ 

あなたは私たちにrandom_functionの宣言を表示するには忘れてしまったが、関数のシグネチャが一致しないので、エラーメッセージから判断すると、

void* ranfom_function() 

ように見えますFuncPointerの署名(ranfom_functionには引数がなく、戻り値の型が異なります)、エラーが発生します。


別のバグ、それはエラーで示されていない:FuncPointerの戻り値の型はIOThreadPool::Task(ボイド*対のボイド)が受け付ける引数の戻り値の型と一致していません。


ソリューション:宣言instad

void* ranfom_function(void*) 

void* (*FuncPointer)(void*) 
+0

あなたは男です。これはそれだった。それを私に説明してくれてありがとう...あなたはまた、私のためにこのコンセプトについて新しい光を放っただけです。なぜ私はそれが機能していなかったのか理解しています。君に乾杯! – user0000001

関連する問題