Возможный дубликат:
недействительные указатели: разница между 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++
? - person verdesmarald   schedule 04.10.2012void*
) в указатель на функцию (например,void* (*)(void*)
). Однако многие компиляторы позволят вам уйти от этого. Я бы либо удалил, либо скорректировал составtask2
, который вы делаете, когда звонитеthread_add_work
. Я бы также удалил(void*)
составa
, который, кажется, бесполезен. Слишком много бросков - всегда плохой знак, они просто скрывают ошибки. - person john   schedule 04.10.2012