[英]C++ PTHREADS - Invalid conversion void*(*)() to void*(*)(void*)
我必須將類型“ risposta”的參數“ r”發送到函數RispostaServer。 編譯器給我: invalid conversion void*(*)() to void*(*)(void*)
這是我應該糾正的代碼片段:
{/*other istructions*/
risposta r;
r.mess = m1;
r.codaSC = codaSC;
pthread_create(&threads[threads_index],&attr,RispostaServer,(void*)&r);
threads_index++;
}
void* RispostaServer(void* m){
risposta* m1 = (risposta*) m;
/*other istructions*/
}
我應該編輯什么? 我正在嘗試幾個小時。
在[MCVE]之前,我會為此在黑暗中刺傷(但請提供一個)。
您對RispostaServer
的聲明看起來像這樣嗎?
void* RispostaServer();
那么pthread_create
調用可見的RispostaServer
的唯一版本是不帶參數的版本。 這與編譯器拋出的類型投訴相匹配。
您后面的函數定義將創建一個確實帶有參數的RispostaServer
新重載,您可以在代碼下方調用該函數,但是那時pthread_create
調用為時已晚。
聲明應符合以下定義:
// Entrypoint for Risposta worker thread.
// Argument must be a risposta*, cast to `void*`.
void* RispostaServer(void* m);
順便說一句,您的線程將被破壞,因為您要傳遞指向立即超出范圍的局部變量的指針,因此請在上面添加以下注釋:
// The risposta it points to must exist for the lifetime
// of the thread.
…您確實應該使用std::thread
而不是平台特定庫的C API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.