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

问题描述:

我有一个函数指针,我试图传递给一个类方法,其中pthread_create将被调用传递该参数。但我收到了一些错误,并不确定我想从哪里出发。C++传递函数指针两次导致问题

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

你能提供random_function吗?它有正确的签名? – Dutow

invalid conversion from ‘void* (*)()’ to ‘void (*)(void*)’ 

你忘了我们展示的random_function的声明,但是从错误信息来看,这似乎是

void* ranfom_function() 

由于函数签名不匹配FuncPointerranfom_function缺少参数,并且返回类型不同)的签名,则会出现错误。


另一个缺陷,即不被错误所示:的FuncPointer返回类型不匹配IOThreadPool::Task(空隙VS无效*)接受参数的返回类型。


解决方法:声明instad

void* ranfom_function(void*) 

void* (*FuncPointer)(void*) 
+0

你是男人。就是这样。感谢您向我解释......您也为我阐释了这个概念的新亮点。我现在明白为什么它不起作用。祝贺你! – user0000001