题
我创建一个Lua模块具有非常大量使用大口包裹C ++类的。将包装产生,没有任何问题,编译(与-Wall)。然而,在一对夫妇的我发现的地方,我遇到了以下问题:会员基本数据分配失败
。如果我运行:
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require('myModule')
> a = myModule.ClassA()
我可以然后验证元表附加到“一”包含所有其构件的数据(在这种情况下分别字段“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的一个错误。我已经提交一个bug报告,说明该问题的原因
这个问题实际上是由于嵌套命名空间问题与SWIG是如何工作的我的一个误解结合。我曾以为,我通过%带来的每个项目包括在我的接口文件将被处理的gcc进程的#includes的方式。然而,在SWIG文件必须%包含在其内容被引用的顺序。
请参阅澄清链接错误报告。
其他提示
总是非常小心 分配的使用痛饮! 需要注意的是在 运算符=() 强>功能仅用于本地类型。 每当你指定你自己的对象,只有地址被复制。
了解更多关于此信息: SWIG C ++到Python:警告(362) :操作=忽略
不隶属于 StackOverflow