当前位置: 技术问答>linux和unix
请高手帮我看一下,函数指针为何转换失败?
来源: 互联网 发布时间:2015-09-20
本文导语: 请高手帮偶看一下,为什么提示函数指针转换失败? 先说明一下,因为要在PacketCapturer::start()中创建多线程来进行完成函数回调,偶用的是POSIX。 本来可以直接在PacketCapturer::start()中直接调用pktHandler所指向的函数来...
请高手帮偶看一下,为什么提示函数指针转换失败?
先说明一下,因为要在PacketCapturer::start()中创建多线程来进行完成函数回调,偶用的是POSIX。
本来可以直接在PacketCapturer::start()中直接调用pktHandler所指向的函数来直接完成的,但是
由于POSIX中pthread_create所定义的接口和pktHandler不同的缘故,不能直接在PacketCapturer::start()中调用,我于是在PacketCapturer中增加了了一个私有成员函数loadHandler来实现pktHandler接口到pthread_create接口的转换,也就是如下面代码所写的那样做的,可是编译
提示
packetcapturer.cpp:333: no matches converting function 'loadHandler' to type 'void*(*)(void*)'
packetcapturer.h:79: candidates are: void* PacketCapturer::loadHandler(void*)
也就是说接口的转换失败了,可是我检查了loadHandler的定义完全满足pthread_create中第三个
参数,也就是函数指针的定义,为何还是失败,请帮我看看,万分感谢~
这些是定义:
int pthread_create(pthread_t* thread, pthread_attr* attr, void* (*start_routine)(void*), void* arg);
typedef void (*pktHandler)(const u_char* pkt);
class PacketCapturer {
private: void *loadHandler(void *ph);
}
这些是实现:
void* PacketCapturer::loadHandler(void *ph) {
(*((pktHandler)ph))(this->pkt);
return NULL;
}
调用(在PacketCapturer::start()中执行的):
line 333: pthread_create(&thr, NULL, this->loadHandler, *h);
编译错误:
packetcapturer.cpp:333: no matches converting function 'loadHandler' to type 'void*(*)(void*)'
packetcapturer.h:79: candidates are: void* PacketCapturer::loadHandler(void*)
先说明一下,因为要在PacketCapturer::start()中创建多线程来进行完成函数回调,偶用的是POSIX。
本来可以直接在PacketCapturer::start()中直接调用pktHandler所指向的函数来直接完成的,但是
由于POSIX中pthread_create所定义的接口和pktHandler不同的缘故,不能直接在PacketCapturer::start()中调用,我于是在PacketCapturer中增加了了一个私有成员函数loadHandler来实现pktHandler接口到pthread_create接口的转换,也就是如下面代码所写的那样做的,可是编译
提示
packetcapturer.cpp:333: no matches converting function 'loadHandler' to type 'void*(*)(void*)'
packetcapturer.h:79: candidates are: void* PacketCapturer::loadHandler(void*)
也就是说接口的转换失败了,可是我检查了loadHandler的定义完全满足pthread_create中第三个
参数,也就是函数指针的定义,为何还是失败,请帮我看看,万分感谢~
这些是定义:
int pthread_create(pthread_t* thread, pthread_attr* attr, void* (*start_routine)(void*), void* arg);
typedef void (*pktHandler)(const u_char* pkt);
class PacketCapturer {
private: void *loadHandler(void *ph);
}
这些是实现:
void* PacketCapturer::loadHandler(void *ph) {
(*((pktHandler)ph))(this->pkt);
return NULL;
}
调用(在PacketCapturer::start()中执行的):
line 333: pthread_create(&thr, NULL, this->loadHandler, *h);
编译错误:
packetcapturer.cpp:333: no matches converting function 'loadHandler' to type 'void*(*)(void*)'
packetcapturer.h:79: candidates are: void* PacketCapturer::loadHandler(void*)
|
是不是宏定义有问题,但一时又看不出来,贴完整一些看看
|
你的pktHandler可能要定义成
typedef (void*) (*pktHandler)(const u_char* pkt);
typedef (void*) (*pktHandler)(const u_char* pkt);
|
void* (*)(void*)
typedef void (*pktHandler)(const u_char* pkt);
两个确实不一致,老关也许是对的
typedef void (*pktHandler)(const u_char* pkt);
两个确实不一致,老关也许是对的
|
就这个,贴上来看看