我使用 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 *'
就好像“=”右侧的表达式是与包含要重新分配的数据字段的元素具有相同类型的对象。我确信我一定错过了一些简单的东西,但我已经用头撞墙几个小时了,但毫无结果。
有人有什么想法吗?谢谢!
最佳答案
事实证明,这是 SWIG 中的一个错误。我已提交a bug report explaining the cause of the problem .
这个问题实际上是由于嵌套命名空间问题以及我对 SWIG 如何工作的误解造成的。我假设我通过接口(interface)文件中的 %include 引入的每个项目都将以 gcc 处理 #includes 的方式进行处理。但是,在 SWIG 文件中,必须按照引用其内容的顺序包含%。
请参阅链接的错误报告以获取说明。
关于lua - swig 包装变量的基本赋值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/941626/