2017-05-04 99 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*" 

香港專業教育學院嘗試了一切,轉換,鑄造,沒有什麼工作。

注:沒有其他錯誤存在,只是類型不匹配

編輯:

好像簽名要求

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 
}; 

如果您正在使用使用std::thread而不是並行線程調用C++ 11我的意見。

+1

這是正確的。 OP應該只是閱讀文檔(和錯誤信息)! –

+1

Pthreads還需要使用C語言鏈接的功能。 –

+0

謝謝,它有幫助。即時通訊有點新的多線程,所以傳遞指針類型讓我感到困惑。起初我認爲投射/轉換會有所幫助。 – Hmmmmmmm