2

我使用 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 *'

好像“=”右侧的表达式是与包含要重新分配的数据字段的元素具有相同类型的对象。我确定我一定错过了一些简单的东西,但是我已经把头撞在墙上几个小时了,但无济于事。

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

4

2 回答 2

3

事实证明,这是 SWIG 中的一个错误。我已经提交了一份错误报告,解释了问题的原因

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

有关说明,请参阅链接的错误报告。

于 2009-06-03T15:04:38.367 回答
0

使用 SWIG进行作业时始终要非常小心!请注意,operator=()函数仅用于本机类型。每当您分配自己的对象时,只会复制地址。

阅读这篇文章的更多信息:SWIG C++ 到 Python:警告(362):运算符 = 被忽略

于 2012-02-29T09:31:26.797 回答