我必须将"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*/
}我应该编辑什么?我试了几个小时。
发布于 2018-10-19 18:22:28
我会在黑暗中试一试,pre-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。
https://stackoverflow.com/questions/52890335
复制相似问题