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: 注: 仮想ボイド FRONTEND::_impl_RFInfo::rf_flow_id(const char*)

/usr/local/redhawk/core/include/redhawk/FRONTEND/RFInfo.h:325: 注: 仮想ボイド 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 に答える