我试图在命令行上编译程序,但出现此错误。它指向以下代码中的pthread_create行。我的pthreads导入正确,并且我在Ubuntu上运行,所以我知道这不是问题。否则,我对正在发生的事情一无所知。
int main() {
pthread_t thinker;
if(pthread_create(&thinker, NULL, thinker, NULL)) {
perror("ERROR creating thread.");
}
pthread_join(thinker, NULL);
return 0;
}
最佳答案
线程创建的签名是:
int pthread_create(pthread_t * thread,
const pthread_attr_t * attr,
void * (*start_routine)(void *),
void *arg);
如果您在代码中看到,则表示您正在传递
thinker
作为与void * (*start_routine)(void *)
不兼容的第三参数。它应该是函数指针。它应该是:void *callback_function( void *ptr ){}
pthread_create(&thinker, NULL, callback_function, NULL)
关于c++ - g++编译器:从'pthread_t {aka long unsigned int}'到'void *(*)(void *)'的错误无效转换[-fpermissive],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32809518/