我创建一个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) :操作=忽略

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top