2014-06-20 19 views
0

我試圖訪問結構成員沒有屬性訪問結構成員tolua ++與第一像這樣性質

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,因爲我期望,因爲它是char arry而不是lua字符串,它會引發錯誤:「value is'string';'tabl e'預計。「 那好吧,我添加屬性,這些變量能夠爲這裏訪問它們:

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; 

問題:正如你可以看到我添加的屬性,以能夠訪問這些變量和解決焦炭ARRY轉換,但即使它仍然拋出我「的價值是'串','表'預期。」我不明白爲什麼?它可能是錯誤還是我做錯了? 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

問題解決了,裏面有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回調或刪除默認屬性,只是使用自定義屬性作爲默認值。