我正在尝试构建一个基于回调的串行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&gt; ...... \ Src \ Support \ AR2500调试\ Main.cpp(99):错误C2664:'ocular :: DeviceClass :: StartAsynchRX':无法从'DemoCallbackClass(__cdecl *)转换参数1 (void)'to'obular :: DeviceCallback *'
我有理由相信我在这里做了一些愚蠢的事,但我找不到它的生命。上周我使用完全相同的方法编写了一个事件计时器类,它工作得很好。如果结构/方法看起来对每个人都很好,我猜这是一个微妙的错字,我只需要一次重写一个块,直到我摆脱该死的错误。
你的解散,
DKW
答案 0 :(得分:0)
从这一行中删除括号:
DemoCallbackClass MyDemoCallback();
所以它看起来像这样:
DemoCallbackClass MyDemoCallback;
在这种情况下,错误输出完全没有帮助,但是应该修复它。