2017-05-04 25 views
0

私は艦隊で、レースという名前の関数を持っている*対象:POSIX(C++)パラメータの型の不一致

void* race(Fleet* fleet){ 
     //some code here 
    } 

、別のPOSIXスレッド引数:

vector<Fleet*> allfleet; //value has been passed/stored, ignore 
    pthread_create(&t[i],NULL,race,allfleet.at(i)); 

しかしエラーがレースに登場引数pthread_create行の

error: Incompatible function parameter type "void *" and "fleet*" 

iveすべてを試した、変換、キャスト、何も動作しません。

注:現在無し他のエラー、ちょうど型の不一致

編集:

署名が

void* function (void*) 

が必要ですが、代わりにレースが

void* fuction (Fleet*) 
+2

これは実行している例ですか?あなたが得ているエラーは、あなたが私たちに示しているコードと一致していないようです(C++は大文字と小文字を区別します)。 –

+1

'race 'を正しいプロトタイプで定義してみてください。 – molbdnilo

+3

エラーメッセージをコピーして貼り付けてください。コンパイラは "param"という単語を使用しません。 – molbdnilo

答えて

2

pthread_create call requires void *(*start_routine) (void *) argumentであるように思えます。あなたの機能はそれと互換性がありません。試してみてください:

void* race(void* data) { 
    Fleet* fleet = (Fleet*)data; 
    //some code here 
}; 

あなたの代わりにpthreadの呼び出しのstd::threadを使用してC++ 11 Iアドバイスを使用している場合。

+1

これは正しいです。 OPはドキュメント(とエラーメッセージ)を読んだだけです! –

+1

また、PthreadにはC言語リンケージ機能が必要です。 –

+0

ありがとう、それは助けます。私はちょっと新しくマルチスレッド化しているので、ポインタ型を渡すと混乱します。最初はキャスティング/変換が助けになると思いました。 – Hmmmmmmm