C++将函数绑定到lua时出现错误。

我认为我找到了答案,很快会带着结果回来。

我遇到了这个错误,不知道该怎么解决,同时不希望将方法设置为静态的。如果它们是静态的,我就不会得到这个错误,但那样我就无法使用任何非静态的变量或函数。还有,在你说int和lua_CFunction可能是不同类型之前,它们不是。这是lua_CFunction的定义方式:

typedef int (*lua_CFunction) (lua_State *L);

*

1   IntelliSense:类型为“int(LuckyIrc ::*)(lua_State * l)” 的参数与类型为“lua_CFunction”的参数不兼容,f:\ Programming \ Visual Studio \ C ++ \ IrcBot \ IrcBot \ LuckyIrc.h 129 4 IrcBot

代码:

类 MyClass {
//other stuff
private:
//other stuff
    int Lua_SendMessage(lua_State *l);
    int Lua_SendRaw(lua_State *l);
    int Lua_SendAction(lua_State *l);
    int Lua_SendNotice(lua_State *l);
    int Lua_Quit(lua_State *l);
    int Lua_Part(lua_State *l);
    int Lua_SendNick(lua_State *l);
    int Lua_Kick(lua_State *l);
    int Lua_Join(lua_State *l);
    int Lua_Connect(lua_State *l);

    void SetUpLua()
    {
        LuaState = luaL_newstate();
        luaL_openlibs(LuaState);
        /*错误发生在这里*/lua_register(LuaState, "SendMessage", Lua_SendMessage);
        /*还有这里*/lua_register(LuaState, "SendRaw", Lua_SendRaw);
        /*还有这里*/lua_register(LuaState, "Quit", Lua_Quit);
        /*还有这里*/llua_register(LuaState, "Part", Lua_Part);
        /*还有这里*/lua_register(LuaState, "SendNotice", Lua_SendNotice);
        /*还有这里*/lua_register(LuaState, "SendAction", Lua_SendAction);
        /*还有这里*/llua_register(LuaState, "SetNick", Lua_SendNick);
        /*还有这里*/llua_register(LuaState, "Join", Lua_Join);
        /*还有这里*/llua_register(LuaState, "Kick", Lua_Kick);
        /*还有这里*/llua_register(LuaState, "Connect", Lua_Connect);
    }
}
点赞
用户2328951
用户2328951

lua_register 只直接支持自由函数(或静态方法,除了可见性外相同)。因此,你需要找另一种方法传递对象指针。如果你只需要一个单例(即希望在脚本函数的所有调用之间共享相同的状态),最简单的方法是使用一个私有静态变量(实例指针)。

此外,你可以尝试使用 luabind 库,以便更轻松地绑定自定义函数和类。

2013-06-13 20:06:13