我试图将一个看似简单的回调方法指针设置为变量并得到以下错误:
CSerialSniffer.cpp|11|错误:无法从类型 'Nexus::TReceiveCallback (CSerialSniffer::)(Nexus::CData*, Nexus::IMetaData*)'}' 转换 'CSerialSniffer::AsyncRecieverReceived'| 键入'Nexus::typeAsyncReceiverCallback {aka Nexus::TReceiveCallback ( )(Nexus:: CData , Nexus::IMetaData*)}'|
这是 set 语句:
typeAsyncReceiverCallback l_pPointer = AsyncRecieverReceived;
我定义了以下内容:
typedef TReceiveCallback (*typeAsyncReceiverCallback)(CData *a_pData, IMetaData *a_pMetaData);
class CSerialSniffer
{
...
public:
Nexus::TReceiveCallback AsyncRecieverReceived(Nexus::CData *a_pData, Nexus::IMetaData *a_pMetaData);
...
}
我已经在这几个小时了,有什么想法吗?
回应答案: 我在这里有相同的回调机制:
typedef void (*EnqueueCallback)( PData *pd );
class SomeClass
{
...
public:
void enqueue( PData *pd );
...
};
class CSerialSniffer
{
...
public:
void set_enqueue_callback(EnqueueCallback a_pEnqueueCallback );
...
}
SomeClass::SomeFunction(){
this->serialSniffer->set_enqueue_callback(this->enqueue);
}
它编译得很好。两者有什么区别?