SWIG失去结构范围

时间:2016-05-17 15:37:57

标签: python c++ swig

我正在尝试在用C ++编写的协议解析器和用Python编写的TCP数据包过滤器之间创建一个接口。我不熟悉使用C ++和python,并且已经尝试让两者合作几天了。

我正在使用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中定义 有谁知道我做错了什么? 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为这纯粹是出于好运。我很了解C,但我从未使用过C ++。有人说&#34; ::&#34;对我来说是一个外国概念,或者对我来说是一个外国概念。

为了解决这个问题,我需要包含该功能所在的命名空间。我不认为任何人都可以从我上面的问题中得出这个,因为我没有为完整性目的发布源代码。

Swig界面应该是:

%module e2ParserSwig

%{
#include "E2ProtocolHandler.h"
%}

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