簡體   English   中英

C ++ PTHREADS-無效的將void *(*)()轉換為void *(*)(void *)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM