2016-05-17 6 views
0

Я пытаюсь создать интерфейс между парсером протокола, написанным на C++, и фильтром пакетов TCP, написанным на Python. Я не знаком с использованием C++ с python и стараюсь, чтобы они сотрудничали в течение нескольких дней.SWIG Losing Scope of Structures

Я использую библиотеку swig. Класс разбора (я не писал) содержит много ссылок на другие файлы C++ через файлы заголовков. Класс C++ называется E2ProtocolHandler.cpp и имеет файл заголовка, содержащий все зависимости, называемые E2ProtocolHandler.h.

Я написал следующий интерфейс Swig соблюдать следующее:

%module e2ParserSwig 

%{ 
#include "E2ProtocolHandler.h" 
%} 

bool parseE2(std::vector<uint8_t> ui8BufferIn, TTCAPMessage_t &tcapMsg); 

Бег это не дает мне никаких проблем:

swig -c++ -python -o e2Parser_wrap.cpp e2ParserSwig.i 

Компиляция, где вопросы сферы применения возникают:

g++ -c -fPIC e2Parser_wrap.cpp -I/usr/include/python2.6 -I/usr/lib/python2.6 

Ошибка:

e2Parser_wrap.cpp:6607: error: ‘TTCAPComponent_t’ was not declared in this scope 

Структура TTCAPCompnent_t определена в E2ProtocolHandler.h Кто-нибудь знает, что я делаю неправильно? Заранее благодарим за любую помощь.

ответ

0

Я понял, что это просто не повезло. Я знаю C довольно хорошо, но я никогда не использовал C++. То, что сказано «::», является для меня чужой концепцией или для меня чужой концепцией.

Чтобы исправить проблему, мне нужно было включить пространство имен, в котором находится функция. Я не думаю, что кто-то мог получить это из моего вопроса выше, потому что я не публиковал исходный код для целей целостности.

интерфейс

Swig должно быть:

%module e2ParserSwig 

%{ 
#include "E2ProtocolHandler.h" 
%} 

bool E2ProtocolHandler::parseE2(std::vector<uint8_t> ui8BufferIn, TTCAPMessage_t &tcapMsg);