先说一下项目,用CEGUI做界面,然后由tolua++导出各种函数给lua使用。
//基类
namespace CEGUI {
class Window{
...
void setText(const String&text, COLOR c=COLOR_BLACK);
}; // end of Window
//StaticText类
class StaticText:public Window
{
}
//ItemCell类
class ItemCell:public Window
{
...
void setText(const String& text); //实际上此方法会隐藏基类方法
}
...
} //end namespace CEGUI
// lua代码这样写
local win = WindowManager:getWindow("xxx")
win:setText("text message", COLOR_RED);
一般来讲getWindow返回类型是"CEGUI::Window",但是我们发现在win:setText这行代码,偶发性会报错,概率比较低:
error in function "setText", argument #3 is number; "[no object] expected".
尝试把COLOR_RED参数去掉就不报错了。
把win类型用tolua.type(win)打印出来,发现报错的时候类型不是"CEGUI::Window",而是"CEGUI::ItemCell",这就很奇怪了,为什么类型会变呢