2013-12-13 2 views
0

Использование:ошибка: не может выделить объект абстрактного типа «FRONTEND_RFInfo_In_i

Redhawk 1,9/CentOS 6,4 (32 бит)/C++ реализация

Создание нового FRONTEND :: TUNER устройства

Использование по умолчанию установка при генерации кода

Следующее сообщение об ошибке появляется, когда я добавляю следующий порт, необходимый для цифрового тюнера FRONTEND, и восстанавливает код.

<ports> 
    <provides repid="IDL:FRONTEND/DigitalTuner:1.0" providesname="DigitalTuner"/> 
    <provides repid="IDL:FRONTEND/RFInfo:1.0" providesname="RFInfo"/> 
</ports> 

Сообщение об ошибке (окно проблемы):

cannot allocate an object of abstract type ‘FRONTEND_RFInfo_In_i’ TestFrontEndDevice_base.cpp /TestFrontEndDevice/cpp line 50 C/C++ Problem

Сообщение об ошибке (консоли):

port_impl.h:56: note: because the following virtual functions are pure within ‘FRONTEND_RFInfo_In_i’:

/usr/local/redhawk/core/include/redhawk/FRONTEND/RFInfo.h:323: note: virtual void FRONTEND::_impl_RFInfo::rf_flow_id(const char*)

/usr/local/redhawk/core/include/redhawk/FRONTEND/RFInfo.h:325: note: virtual void FRONTEND::_impl_RFInfo::rfinfo_pkt(const FRONTEND::RFInfoPkt&)

make: * [TestFrontEndDevice-TestFrontEndDevice_base.o] Error 1

ответ

1

Там, кажется, ошибка в генерации кода для Класс RFInfo. Если вы сравните сигнатуры сгенерированного кода в файле port_impl.h с приведенными выше «нереализованными», вы заметите, что для функции rf_flow_id в port_impl.h ключевое слово const отсутствует. То же самое можно сказать и о методе rfinfo_pkt. В объявлении функции отсутствует ключевое слово const и амперсанд.

Чтобы исправить это, просто добавьте ключевые слова const и амперсанд в соответствующие места как в объявлении в файле port_impl.h, так и в файле port_impl.cpp.

1

Это известная проблема, исправленная для выпуска 1.9.1.

Проблема является результатом сигнатур функций порта RFInfo в сгенерированный port_impl. * Файлы, отличающиеся от тех, в родителя/базового класса, который также случается быть чистым виртуальным. Чтобы исправить проблемы в вашем коде, вам нужно добавить «сопзЬ» в rf_flow_id, и как «сопзЬ» и «&» в 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) 
+0

Это фиксирует текущую ошибку, к сожалению, я до сих пор не могу получить сборки я получаю следующее сообщение об ошибке связи. /usr/local/redhawk/core/lib/libfrontendInterfaces.so: неопределенная ссылка на оператор BULKIO :: PrecisionUTCTime :: << = (cdrStream &) ' /usr/local/redhawk/core/lib/libfrontendInterfaces.so: undefined ссылка на 'BULKIO :: PrecisionUTCTime :: operator >> = (cdrStream &) const ' –

+0

Ответил [здесь] (http://stackoverflow.com/questions/20621726/linker-error-when-creating-1-9-frontend- устройства создания-из-язя, использующих по умолчанию) – jkb

Смежные вопросы