2016-05-17 160 views
0

我正嘗試在用C++編寫的協議解析器和用Python編寫的TCP包過濾器之間創建接口。我對使用Python的C++並不熟悉,並且一直在努力使這兩者合作好幾天。SWIG丟失結構範圍

我正在使用swig庫。解析類(我沒有寫)通過頭文件包含許多對其他C++文件的引用。 C++類被稱爲E2ProtocolHandler.cpp,並且有一個包含所有稱爲E2ProtocolHandler.h的依賴關係的頭文件。

我寫了下面痛飲接口遵守本:

%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++。這是說「::」對我來說是一個外國概念,或者對我來說是一個外國概念。

爲了解決這個問題,我需要包含函數所在的命名空間。我不認爲任何人都可以從上面的問題中得出這個結論,因爲我沒有爲完整性目的發佈源代碼。

的痛飲接口應該是:

%module e2ParserSwig 

%{ 
#include "E2ProtocolHandler.h" 
%} 

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