C++ 托卢亚++;具有属性的访问结构成员

C++ 托卢亚++;具有属性的访问结构成员,c++,lua,tolua++,C++,Lua,Tolua++,起初,我试图访问没有属性的结构成员,如下所示: 主文件: typedef struct { char var1[15]; char var2[33]; } my_struct_t; class MyClass { MyClass() { } ~MyClass() { } my_struct_t my_struct; }; 打包文件: class MyClass { MyClass () { } ~MyClass

起初,我试图访问没有属性的结构成员,如下所示:

主文件:

typedef struct
{
    char    var1[15];
    char    var2[33];
} my_struct_t;

class MyClass {
    MyClass()  { }
    ~MyClass() { }

    my_struct_t     my_struct;
};
打包文件:

class MyClass {
    MyClass ()  { }
    ~MyClass () { }
    my_struct_t     my_struct;
};

typedef struct
{
    tolua_property char var1[15];
    tolua_property char var2[33];
} my_struct;
但它不起作用,问题是在将char-arry转换为lua字符串时,我无法按预期设置var1,因为它是char-arry而不是lua字符串,这会引发错误:“值为‘string’;预期为‘table’”。 好的,然后我向这些变量添加了属性,以便能够访问它们,如下所示:

typedef struct
{
    string get_var1()
    {
    // const char* can be also used instead of std::string to pass this as string into a lua?
        string str = var1;
        return str;
    }
    string get_var2() {
        string str = var2;
        return str;
    }
    void set_var1(string p_name) {
        strncpy(var1, p_name.c_str(), sizeof(var1));
        var1[sizeof(var1) - 1] = 0;
    }
    void set_var2(string p_name) {
        strncpy(var2, p_name.c_str(), sizeof(var2));
        var2[sizeof(var2) - 1] = 0;
    }
    char    var1[15];
    char    var2[33];
} my_struct_t;
问题:正如您所看到的,我添加了属性,以便能够访问这些变量并解决字符数组转换,但即使它仍然抛出“值为‘字符串’;应为‘表格’”。我不明白为什么?可能是虫子,还是我做错了? lua代码:

localpacket=MyClass:new()
packet.my_struct.var1=“hi”--抛出“值为'string';应为'table'。即使使用属性
打印(packet.my_struct.var1)

问题已解决,tolua++解析器内部存在问题,即使您声明了自己的变量属性,也会使其成为默认变量属性,例如:

tolua_function(tolua_S,"set_var1",  tolua_lua_api_my_struct_t_set_var100); // my own property
tolua_function(tolua_S,"set_var2",  tolua_lua_api_my_struct_t_set_var200); // my own property
tolua_variable(tolua_S,"var1",  tolua_get_my_struct_t_var1, tolua_set_my_struct_t_var1); // default property
tolua_variable(tolua_S,"var2",  tolua_get_my_struct_t_var2, tolua_set_my_struct_t_var2); // default property
当您希望在LUA中分配变量时,默认属性将被称为主属性

要解决这个问题,实际上有两种方法,只需删除自定义属性并更改tolua识别函数iside tolua_set_my_struct_t_var1回调或删除默认属性并将自定义属性用作默认属性