swig包装变量的基本分配失败

时间:2009-06-02 20:08:19

标签: lua variable-assignment swig

我使用swig创建了一个包含大量包装C ++类的lua模块。生成和编译包装器(使用-Wall)没有任何问题。但是,在我发现的几个地方,我遇到了以下问题:成员数据的基本分配失败。

如果我跑:

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require('myModule')
> a = myModule.ClassA()

然后,我可以验证附加到“a”的元表包含其所有成员数据(在本例中为字段“b”和“c”,分别为类型ClassB和ClassC。)

我还可以做:

> a.b = myModule.ClassB()

成功将b重新分配给ClassB()的新实例。但是,当我去做时:

> a.b.c = myModule.ClassC()

我收到错误消息:

Error in ClassB_c_set (arg 2), expected 'ClassC *' got 'ClassB *'

好像'='右侧的表达式是与包含要重新分配的数据字段的元素相同类型的对象。我敢肯定我一定会错过一些简单的东西,但是我一直在撞墙几个小时,现在无济于事。

有人有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

事实证明这是SWIG中的一个错误。我已提交a bug report explaining the cause of the problem

这个问题实际上是由于嵌套的命名空间问题加上对SWIG如何工作的误解。我假设我通过%include包含在我的界面文件中的每个项目都将按照gcc处理#includes的方式进行处理。但是,在SWIG文件中,必须按引用内容的顺序包含%。

请参阅链接的错误报告以获得澄清。

答案 1 :(得分:0)

使用SWIG始终要非常小心 分配 ! 请注意, operator =() 函数仅用于本机类型。 无论何时分配自己的对象,都只复制地址。

阅读以下文章的详情:SWIG C++ to Python: Warning(362): operator= ignored