使用:
Redhawk1.9/ CentOS 6.4 (32位)/ C++实现
创建一个新的前端::调谐器设备
在代码生成中使用默认设置
当我添加前端数字调谐器所需的以下端口并重新生成代码时,会发生以下错误消息。
<ports>
<provides repid="IDL:FRONTEND/DigitalTuner:1.0" providesname="DigitalTuner"/>
<provides repid="IDL:FRONTEND/RFInfo:1.0" providesname="RFInfo"/>
</ports>错误消息(问题窗口):
无法分配抽象类型的对象“FRONTEND_RFInfo_In_i”TestFrontEndDevice_base.cpp /TestFrontEndDevice/cpp行50C/C++问题
错误消息(控制台):
port_impl.h:56:注意:因为以下虚拟函数是纯粹在“前端_RFInfo_In_i”中的: /usr/local/redhawk/core/include/redhawk/FRONTEND/RFInfo.h:323:注:虚空FRONTEND::_impl_RFInfo::rf_flow_id(const *) /usr/local/redhawk/core/include/redhawk/FRONTEND/RFInfo.h:325:注释:虚拟空FRONTEND::_impl_RFInfo::rfinfo_pkt(const前端::RFInfoPkt&) make:* TestFrontEndDevice-TestFrontEndDevice_base.o错误1
发布于 2013-12-13 22:44:56
在RFInfo类的代码生成过程中似乎存在一个bug。如果您将port_impl.h文件中生成的代码的签名与上面“未实现的”代码的签名进行比较,您将注意到port_impl.h中的rf_flow_id函数没有const关键字。rfinfo_pkt方法也是如此。它在函数声明中缺少了const关键字和一个符号。
要解决这个问题,只需在port_impl.h文件中的声明和port_impl.cpp文件中的定义中的适当位置添加const关键字和符号。
发布于 2013-12-16 14:45:15
这是一个已知的问题,已经修复了1.9.1版本。
问题的原因是生成的RFInfo文件中的port_impl.*端口函数签名与父/基类中的签名不同,而后者恰好是纯虚拟的。要解决代码中的问题,需要将"const“添加到rf_flow_id中,并将"const”和"&“添加到rfinfo_pkt中,如下所示:
在port_impl.h中:
- void rf_flow_id( char* data);
+ void rf_flow_id( const char* data);
- void rfinfo_pkt( FRONTEND::RFInfoPkt data);
+ void rfinfo_pkt( const FRONTEND::RFInfoPkt& data);在port_impl.cpp中:
-void FRONTEND_RFInfo_In_i::rf_flow_id( char* data)
+void FRONTEND_RFInfo_In_i::rf_flow_id( const char* data)
-void FRONTEND_RFInfo_In_i::rfinfo_pkt( FRONTEND::RFInfoPkt data)
+void FRONTEND_RFInfo_In_i::rfinfo_pkt( const FRONTEND::RFInfoPkt& data)https://stackoverflow.com/questions/20573519
复制相似问题