簡體   English   中英

傳遞派生類指針進行回調

[英]Passing a derived-class pointer for a callback

我正在嘗試構建基於回調的串行RX驅動程序,盡管我使用的結構良好,並且在其他應用程序中經過測試,卻遇到編譯錯誤。 我確定我做的事很愚蠢,但是對於我一生來說,我看不到它,所以多欣賞幾雙眼睛會倍感贊賞。

該設備應具有以下功能:

  1. 在施工中,傳遞comms屬性
  2. 對於同步通信,不要創建新線程,只需在TX上阻塞即可。
  3. 為了接收數據,請生成一個新線程,然后執行用戶在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM