C++ 为回调传递派生类指针

C++ 为回调传递派生类指针,c++,visual-studio-2010,callback,C++,Visual Studio 2010,Callback,我正在尝试构建一个基于回调的串行RX驱动程序,尽管我使用的是一个已知良好并在其他应用程序中测试过的结构,但还是出现了编译错误。我肯定我在做一些愚蠢的事情,但就我的生命而言,我看不见它,所以多看几双眼睛会很感激的 该装置的功能应如下所示: namespace ocular { Class DeviceCallback { public: DeviceCallback(){} ~DeviceCallback(){} virtual void DeviceCallbackFun

我正在尝试构建一个基于回调的串行RX驱动程序,尽管我使用的是一个已知良好并在其他应用程序中测试过的结构,但还是出现了编译错误。我肯定我在做一些愚蠢的事情,但就我的生命而言,我看不见它,所以多看几双眼睛会很感激的

该装置的功能应如下所示:

namespace ocular
{
 Class DeviceCallback
 {
 public:
   DeviceCallback(){}
   ~DeviceCallback(){}
   virtual void DeviceCallbackFunction(unsigned char Data){}
 };
}
  • 在构造时,传入comms属性
  • 对于同步通信,不要创建新线程,只需阻塞TX
  • 为了接收数据,生成一个新线程,并执行用户在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;
      };
    }
    
    1> ..\Src\Support\AR2500调试\Main.cpp(99):错误C2664:“目测::DeviceClass::StartAsynchRX”:无法将参数1从“DemoCallbackClass(uu cdecl*)(void)”转换为“目测::DeviceCallback*”

    我有理由肯定我在这里做了些傻事,但我一辈子都找不到。上周,我使用完全相同的方法编写了一个事件计时器类,它工作得很好。如果结构/方法在所有人看来都不错,我想这是一个微妙的打字错误,我只需要一次重写一个块,直到我摆脱这个该死的错误

    你的绝望


    DKW

    删除此行的括号:

    DemoCallbackClass MyDemoCallback();
    
    看起来是这样的:

    DemoCallbackClass MyDemoCallback;
    
    在这种情况下,错误输出根本没有帮助,但这应该可以解决它。

    可能会重复Oh。。。我的。。。上帝……:):)我觉得自己像个该死的布偶!非常感谢。我担心在我认为是标准的方法中发现了一些wierd扩展性缺陷。(这意味着使用我的相同方法实现的其他应用程序有一个潜在的bug,因此令人担忧)