簡體   English   中英

錯誤:從'int(*)(void *)'到'void *(*)(void *)'的轉換無效

[英]error: invalid conversion from ‘int (*)(void*)’ to ‘void* (*)(void*)’

我正在嘗試生成pthreads並發送一個整數作為參數但是在將參數轉換為void時出現以下錯誤。 我試圖刪除(void *)並隱式轉換,但我仍然遇到同樣的錯誤

error: invalid conversion from ‘int (*)(void*)’ to ‘void* (*)(void*)’ [-fpermissive]
   rc=pthread_create(&threads[i],NULL,probSAT, (void *)&threads_args[i]);

void Solver::p(char** argc)
{
    argvp=argc;
    pthread_t threads[NTHREADS];
    int threads_args[NTHREADS];
    int i=0;
    int rc;

    for(i=0;i<5;i++)
    if(order_heap.empty())
        v[i]=i+1;
    else
        v[i]=(order_heap.removeMin())+1;
    for (i=0;i<32;i++)
    {
        threads_args[i]=i;
        rc=pthread_create(&threads[i],NULL,probSAT, (void *)&threads_args[i]);
    }
    pthread_exit(NULL);
    return;


}

定義為int (*)(void*)函數與定義為void* (*)(void*)的函數不兼容。 您需要將probSAT定義為:

void *probSAT(void *);

如果你想從這個函數有效地返回一個int ,你可以返回一個全局變量的地址,或者(更好的選項)為int分配空間並返回一個指向它的指針(確保你在加入線程時解除分配它) )。

void *probSAT(void *param) {
    int *rval = malloc(sizeof(int));
    if (rval == NULL) {
        perror("malloc failed");
        exit(1);
    }
    ....
    *rval = {some value};
    return rval;
}


void get_thread_rval(pthread_t thread_id) 
{
    void *rval;
    int *rval_int;
    if (pthread_join(thread_id, &rval) != 0) {
        perror("pthread_join failed");
    } else {
        rval_int = rval;
        printf("thread returned %d\n", *rval_int);
        free(rval_int);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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