Kemungkinan Duplikat:
void pointer: perbedaan antara C dan C++
Hai, saya memiliki fungsi berikut:
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
}
Kode di atas berfungsi baik dengan C, tetapi tidak dapat dikompilasi di C++. Saya mendapatkan kesalahan berikut:
error: invalid conversion from ‘void*’ to ‘void* (*)(void*)’
error: initializing argument 2 of ‘int thpool_add_work(thpool_t*, void* (*)(void*), void*)’
Saya tidak dapat mengetahui alasan kesalahan ini. Adakah yang tahu mengapa kesalahan ini muncul ketika saya mengubah ekstensi file menjadi CPP dan mengkompilasi?
void*
secara implisit dapat dikonversi diC
, tetapi tidak diC++
? - person verdesmarald   schedule 04.10.2012void*
) menjadi penunjuk fungsi (yaituvoid* (*)(void*)
). Namun banyak kompiler yang membiarkan Anda lolos begitu saja. Saya akan menghapus atau menyesuaikan pemerantask2
yang Anda buat saat meneleponthread_add_work
. Saya juga akan menghapus(void*)
pemerana
yang sepertinya tidak ada gunanya. Terlalu banyak cast selalu merupakan pertanda buruk, itu hanya menyembunyikan kesalahan - person john   schedule 04.10.2012