【发布时间】:2012-09-25 03:45:06
【问题描述】:
您好,我有以下功能:
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++中却不能? -
在 C++ 中,将数据指针(即
void*)转换为函数指针(即void* (*)(void*))是不合法的。然而,许多编译器会让你摆脱这一点。当您致电thread_add_work时,我会删除或调整您对task2的演员表。我还会删除a的(void*)演员表,这似乎没有任何作用。过多的演员表总是一个不好的迹象,它只是隐藏了错误 -
什么是task2?是函数吗?
-
刚刚更新了问题中task2的内容