我有一个函数指针,我试图传递给一个类方法,其中pthread_create将被调用以传递该参数。但我得到了一些错误,不知道我想从哪里出发。
void (*FuncPointer)(void*);
FuncPointer = random_function;
ThreadPool.Task(FuncPointer);
int IOThreadPool::Task(void* (*FuncPointer)(void*))
{
pthread_t NewThread;
int rc = pthread_create(&NewThread, NULL, FuncPointer, (void *) (intptr_t) IOThreadPool::Threads.size() + 1);
main.cpp:57:29: error: invalid conversion from ‘void* (*)()’ to ‘void (*)(void*)’ [-fpermissive]
请解释为什么即使我将其作为void* (*)(void*)
传递,我也会void* (*)()
。我很困惑,我的头已经开始疼了!
由于
答案 0 :(得分:1)
invalid conversion from ‘void* (*)()’ to ‘void (*)(void*)’
您忘了向我们展示random_function
的声明,但从错误消息判断,它似乎是
void* ranfom_function()
由于函数的签名与FuncPointer
的签名不匹配(ranfom_function
缺少参数,并且返回类型不同),您将收到错误。
错误未显示的另一个错误:FuncPointer
的返回类型与IOThreadPool::Task
接受的参数的返回类型不匹配(void vs void *)。
解决方案:声明instad
void* ranfom_function(void*)
和
void* (*FuncPointer)(void*)