C ++传递一个函数指针两次导致问题

时间:2016-07-22 14:30:58

标签: c++ pointers pthreads

我有一个函数指针,我试图传递给一个类方法,其中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* (*)()。我很困惑,我的头已经开始疼了!

由于

1 个答案:

答案 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*)
相关问题