Я создал модуль lua с очень большим количеством упакованных классов C ++, используя swig. Оболочки генерируются и компилируются (с -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 *'
Как будто выражение справа от '=' было объектом того же типа, что и элемент, содержащий поле данных для переназначения. Я уверен, что, должно быть, мне не хватает чего-то простого, но я уже несколько часов бьюсь головой о стену, но безрезультатно.
У кого-нибудь есть мысли? Спасибо!