[英]Passing a derived-class pointer for a callback
我正在嘗試構建基於回調的串行RX驅動程序,盡管我使用的結構良好,並且在其他應用程序中經過測試,卻遇到編譯錯誤。 我確定我做的事很愚蠢,但是對於我一生來說,我看不到它,所以多欣賞幾雙眼睛會倍感贊賞。
該設備應具有以下功能:
為了實現這一點,我有一個基本的回調類,如下所示:
namespace ocular
{
Class DeviceCallback
{
public:
DeviceCallback(){}
~DeviceCallback(){}
virtual void DeviceCallbackFunction(unsigned char Data){}
};
}
設備類本身內的Start Asynch RX方法為:
void DeviceClass::StartAsynchRX( DeviceCallback* callback )
{
m_externalCallback = callback; // Save a local copy of the callback pointer
m_started = true;
StartAsynchRXThread(); // Spawn the RX Thread
return;
}
然后,我將派生自己的回調為:
Class DemoCallbackClass : public ocular::DeviceCallback
{
public:
void DeviceCallbackFunction(unsigned char myData){
std::cout << myData;
};
}
據我所知,到目前為止這是正確的教科書。 這樣可以很好地編譯,並且我可以構造,配置和使用我的設備類進行同步TX。 當我嘗試實際開始在main中傳遞回調指針時,出現編譯錯誤:
void main(void)
{
DeviceClass MyDevice();
MyDevice.Initialise( *settings from file* );
DemoCallbackClass MyDemoCallback();
MyDevice.StartAsynchRX( &MyDemoCallback ); // ERROR ON THIS LINE
}
1> ...... \\ Src \\ Support \\ AR2500調試\\ Main.cpp(99):錯誤C2664:'ocular :: DeviceClass :: StartAsynchRX':無法從'DemoCallbackClass(__cdecl *)(void)轉換參數1 '到'ocular :: DeviceCallback *'
我可以肯定地說我在這里做了一些愚蠢的事情,但是我一生都找不到。 上周,我使用完全相同的方法編寫了一個事件計時器類,並且工作正常。 如果結構/方法對周圍的每個人看起來都不錯,那么我猜這是一個細微的錯字,我只需要一次重寫一個塊,直到擺脫該死的錯誤。
你在絕望中
大客車
從此行刪除括號:
DemoCallbackClass MyDemoCallback();
所以看起來像這樣:
DemoCallbackClass MyDemoCallback;
在這種情況下,錯誤輸出根本沒有幫助,但這應該可以解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.