ความเป็นไปได้ที่ซ้ำกัน:
ตัวชี้โมฆะ: ความแตกต่างระหว่าง ซี และ ซี++
สวัสดี ฉันมีฟังก์ชั่นดังต่อไปนี้:
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++
ใช่หรือไม่ - person verdesmarald   schedule 04.10.2012void*
) เป็นตัวชี้ฟังก์ชัน (เช่นvoid* (*)(void*)
) ไม่ถูกกฎหมาย ไม่ว่าคอมไพเลอร์จำนวนมากจะยอมให้คุณทำสิ่งนี้ได้อย่างไร ฉันจะลบหรือปรับการแสดงของtask2
ที่คุณทำเมื่อคุณโทรthread_add_work
ฉันยังจะลบ(void*)
นักแสดงของa
ซึ่งดูเหมือนว่าจะไม่มีจุดประสงค์ด้วย การแคสต์มากเกินไปถือเป็นสัญญาณที่ไม่ดีเสมอไป เพียงแต่ซ่อนข้อผิดพลาดเอาไว้ - person john   schedule 04.10.2012