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* (*)()
。我很困惑,我的头已经开始受伤了!
感谢
答
invalid conversion from ‘void* (*)()’ to ‘void (*)(void*)’
你忘了我们展示的random_function
的声明,但是从错误信息来看,这似乎是
void* ranfom_function()
由于函数签名不匹配FuncPointer
(ranfom_function
缺少参数,并且返回类型不同)的签名,则会出现错误。
另一个缺陷,即不被错误所示:的FuncPointer
返回类型不匹配IOThreadPool::Task
(空隙VS无效*)接受参数的返回类型。
解决方法:声明instad
void* ranfom_function(void*)
和
void* (*FuncPointer)(void*)
+0
你是男人。就是这样。感谢您向我解释......您也为我阐释了这个概念的新亮点。我现在明白为什么它不起作用。祝贺你! – user0000001
你能提供random_function吗?它有正确的签名? – Dutow