我必须将类型“ 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*/
}
我应该编辑什么?我正在尝试几个小时。
答案 0 :(得分:2)
在[MCVE]之前,我会为此在黑暗中刺伤(但请提供一个)。
您对RispostaServer
的声明看起来像这样吗?
void* RispostaServer();
然后,RispostaServer
调用可见的pthread_create
的唯一版本是不带参数的版本。符合编译器发出的类型投诉。
您以后的函数 definition 创建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。