Possible Duplicate:
void pointers: difference between C and C++C++的類型轉換錯誤
嗨,我有以下功能:
void task2(int a)
{
printf(" Task 2 running..\n");
sleep(2);
printf(" Task 2 exiting..\n");
}
thpool_add_work(threadpool, (void*)task2, (void*)a);
int thpool_add_work(thpool_t* tp_p, void *(*function_p)(void*), void* arg_p)
{
// some code here
}
上面的代碼使用C效果很好,但在C並不++編譯。我收到以下錯誤:
error: invalid conversion from ‘void*’ to ‘void* (*)(void*)’
error: initializing argument 2 of ‘int thpool_add_work(thpool_t*, void* (*)(void*), void*)’
我無法弄清楚這個錯誤的原因。任何想法爲什麼當我將文件擴展名更改爲CPP並編譯時出現此錯誤?
您需要發佈更多的代碼 - 比如功能和對象的聲明。 –
是不是因爲'void *'可以在'C'中隱式轉換,而不是在'C++'中? – verdesmarald
在C++中,將數據指針(即'void *')轉換爲函數指針(即'void *(*)(void *)')是不合法的。然而,許多編譯器會讓你擺脫這一點。我會刪除或調整你在調用'thread_add_work'時調用的'task2'。我也會刪除似乎無用的'a'的'(void *)'類型。太多的演員總是一個不好的跡象,它只是隱藏錯誤 – john