0

使用:

Redhawk 1.9/CentOS 6.4(32 位)/C++ 实现

创建一个新的 FRONTEND::TUNER 设备

使用代码生成的默认设置

当我添加 FRONTEND Digital Tuner 所需的以下端口并重新生成代码时,会出现以下错误消息。

<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 第 50 行 C/C++ 问题

错误消息(控制台):

port_impl.h:56:注意:因为以下虚函数在 'FRONTEND_RFInfo_In_i' 中是纯函数:

/usr/local/redhawk/core/include/redhawk/FRONTEND/RFInfo.h:323:注意:虚拟 void FRONTEND::_impl_RFInfo::rf_flow_id(const char*)

/usr/local/redhawk/core/include/redhawk/FRONTEND/RFInfo.h:325:注意:虚拟 void FRONTEND::_impl_RFInfo::rfinfo_pkt(const FRONTEND::RFInfoPkt&)

make: * [TestFrontEndDevice-TestFrontEndDevice_base.o] 错误 1

4

2 回答 2

1

这是已在 1.9.1 版本中修复的已知问题。

问题是生成的 port_impl.* 文件中的 RFInfo 端口函数签名与父/基类中的不同,后者也恰好是纯虚拟的。要解决代码中的问题,您需要将“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)
于 2013-12-16T14:45:15.360 回答
1

RFInfo 类的代码生成中似乎存在错误。如果您将 port_impl.h 文件中生成的代码的签名与上述“未实现”代码的签名进行比较,您会注意到 port_impl.h 中的 rf_flow_id 函数没有 const 关键字。rfinfo_pkt 方法也是如此。它在函数声明中缺少 const 关键字和 & 符号。

要解决此问题,只需在 port_impl.h 文件中的声明和 port_impl.cpp 文件中的定义中的适当位置添加 const 关键字和 & 符号。

于 2013-12-13T22:44:56.610 回答