g ++编译器:从'pthread_t {aka long unsigned int}'到'void *(*)(void *)'[-fpermissive]的错误无效转换

时间:2015-09-27 15:24:10

标签: c++ compilation pthreads

我正在尝试在命令行上编译我的程序,我收到了这个错误。它指向以下代码中的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;
}

1 个答案:

答案 0 :(得分:3)

线程创建的签名是:

int pthread_create(pthread_t * thread, 
                       const pthread_attr_t * attr,
                       void * (*start_routine)(void *), 
                       void *arg);

如果您在代码中看到,则您将thinker作为与void * (*start_routine)(void *)不兼容的第3个参数传递。它应该是函数指针。它应该是:

void *callback_function( void *ptr ){}

pthread_create(&thinker, NULL, callback_function, NULL)