我想构建一个基于回调的串行RX驱动程序,并得到一个编译错误,尽管事实上,我使用了一个已知的结构,并在其他测试应用。我确信我在做一些愚蠢的事情,但是对于我来说,我看不到它,所以多加几双眼睛就会非常感激。传递派生类的指针回调
设备应具有如下功能:
- 在建设,通过在通讯科性
- 对于同步通信,不创建一个新的线程,只是TX模块。
- 用于接收数据,产生一个新的线程,并执行用户在RX上传入的回调。
要实现这一点,我有一个基地回调类如下:
namespace ocular
{
Class DeviceCallback
{
public:
DeviceCallback(){}
~DeviceCallback(){}
virtual void DeviceCallbackFunction(unsigned char Data){}
};
}
和设备类本身内开始非同步接收方法:
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。当我尝试实际开始传递回调指针在主显示的编译错误:
void main(void)
{
DeviceClass MyDevice();
MyDevice.Initialise(*settings from file*);
DemoCallbackClass MyDemoCallback();
MyDevice.StartAsynchRX(&MyDemoCallback); // ERROR ON THIS LINE
}
1> ...... \ SRC \支持\ AR2500调试\ Main.cpp的(99):错误C2664: 'ocular :: DeviceClass :: StartAsynchRX':无法将参数1从'DemoCallbackClass(__cdecl *)(void)'转换为'ocular :: DeviceCallback *'
我确信我在这里做了一些愚蠢的事情,但我无法为我的生活找到它。上周我用完全相同的方法编写了一个事件计时器类,它工作得很好。如果结构/方法对所有人都可以,那我想这是一个微妙的错字,我只需要一次重写一个块,直到我摆脱那个该死的错误。
此致在desparation,
DKW
[为什么使用一组空括号来调用没有参数的构造函数时出错?](http://stackoverflow.com/questions/180172/why-is-it-an-error - 使用空集括号 - 呼叫 - 构造函数与否) – 2012-03-12 00:21:20