一見単純なコールバックメソッドポインタを変数に設定しようとすると、次のエラーが発生します。
CSerialSniffer.cpp | 11 |エラー:'CSerialSniffer::AsyncRecieverReceived'をタイプ'Nexus:: TReceiveCallback(CSerialSniffer ::)(Nexus :: CData *、Nexus :: IMetaData *)'}'|から変換できません '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);
}
そしてそれはうまくコンパイルされます。2つの違いは何ですか?