0

奇怪的问题我有一个使用多个类的程序,其中一些类用于定义其他类中的对象,但我无法修改它们的值,不确定这是否有意义,但我会尝试演示

C++ 文件

class A{
public:
    A(){
        c = 0
    }
    int c;
};

class B{
public:
    A d;
};

luabridge::getNamespace(L)
    .addNamespace("test")
        .addClass<A>("A")
            .addConstructor<void(*) ()>()
            .addData("c", &A::c)
        .endClass()
        .addClass<B>("B")
            .addConstructor<void(*) ()>()
            .addData("d", &A::d)
        .endClass()
    .endNamespace();

现在在我们拥有的 lua 文件中

var = test.B()
var.d.c = 2
print(var.d.c)

程序打印

0

只是为了澄清如果 A 的构造函数将 c 设置为 666,那么程序输出 666

4

2 回答 2

1

声明为 as 的对象Type variableName按值传递给 Lua,作为 Lua 管理的副本。因此var.d返回该d对象的副本,并且var.d.c您正在修改该c副本的c变量,而不是原始d对象的变量。

声明为的对象Type* variableName通过引用传递,因此您修改原始d对象,这就是您的第二种方法有效的原因。

LuaBridge 手册中的更多信息。

于 2014-09-26T09:05:55.877 回答
0

我所要做的就是让 B 类中的 A 类对象成为一个指针,我不知道为什么......大约 2 天后,我在调试路上发现了它

class A{
public:
    A(){
        c = 0
    }
    int c;
};

class B{
public:
    A* d;
};

luabridge::getNamespace(L)
    .addNamespace("test")
        .addClass<A>("A")
            .addConstructor<void(*) ()>()
            .addData("c", &A::c)
        .endClass()
        .addClass<B>("B")
            .addConstructor<void(*) ()>()
            .addData("d", &A::d)
        .endClass()
    .endNamespace();
于 2014-05-06T22:25:28.470 回答