我试图在没有属性的情况下访问结构成员,首先是这样的:
主档案:
typedef struct
{
char var1[15];
char var2[33];
} my_struct_t;
class MyClass {
MyClass() { }
~MyClass() { }
my_struct_t my_struct;
};
pkg文件:
class MyClass {
MyClass () { }
~MyClass () { }
my_struct_t my_struct;
};
typedef struct
{
tolua_property char var1[15];
tolua_property char var2[33];
} my_struct;
但它没有用,问题是将字符串转换为lua字符串,我无法按照预期设置var1,因为它是字符串而不是lua字符串,它会引发我错误:&# 34;值是'字符串&#39 ;; '表'预期。&#34 ;. 好的,我添加了这些变量的属性,以便能够访问它们,如下所示:
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;
问题:正如您所看到的,我添加了属性以便能够访问这些变量并解决特征转换,但即使它仍然会让我感觉到#34;值是'字符串&#39 ;; '表'预期&#34。我不明白为什么?它可能是错误还是我做错了? lua代码:
local packet = MyClass:new()
packet.my_struct.var1 = "hi" -- throws "value is 'string'; 'table' expected." even with property
print(packet.my_struct.var1)
答案 0 :(得分:0)
问题解决了,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回调或删除默认属性,只使用自定义属性作为默认属性。