SWIG失去结构范围

SWIG Losing Scope of Structures

本文关键字:范围 结构 失去 SWIG      更新时间:2023-10-16

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

我完全是运气使然。我对C相当熟悉,但我从未使用过C++。这句话":"对我来说是一个陌生的概念,或者对我来说就是一个陌生概念。

为了解决这个问题,我需要包含函数所在的命名空间。我不认为有人会从我上面的问题中得出这一点,因为我发布源代码并不是为了完整性。

Swig接口应该是:

%module e2ParserSwig
%{
#include "E2ProtocolHandler.h"
%}
bool E2ProtocolHandler::parseE2(std::vector<uint8_t> ui8BufferIn, TTCAPMessage_t &tcapMsg);