试图将函数绑定到Lua的C++错误

试图将函数绑定到Lua的C++错误,c++,c,lua,C++,C,Lua,我想我找到了答案,很快就会有结果的 我得到这个错误,不知道如何修复它,而不让方法是静态的。如果它们是静态的,我不会得到错误,但是我不能使用任何非静态变量或函数。在你说之前,可能int和lua_函数是不同的类型,它们不是。下面是lua_c函数的定义 typedef int (*lua_CFunction) (lua_State *L); * 代码: lua_寄存器仅直接支持自由函数或静态方法,它们除了可见性之外是相同的。因此,您必须找到另一种方法来传递对象指针。如果您只需要一个单例,即您希望为脚

我想我找到了答案,很快就会有结果的

我得到这个错误,不知道如何修复它,而不让方法是静态的。如果它们是静态的,我不会得到错误,但是我不能使用任何非静态变量或函数。在你说之前,可能int和lua_函数是不同的类型,它们不是。下面是lua_c函数的定义

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

代码:

lua_寄存器仅直接支持自由函数或静态方法,它们除了可见性之外是相同的。因此,您必须找到另一种方法来传递对象指针。如果您只需要一个单例,即您希望为脚本函数的所有调用共享相同的状态,最简单的方法是使用私有静态变量实例指针


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

好的,谢谢您提供的信息。我想我找到了一种使用函数类解决问题的方法。
1   IntelliSense: argument of type "int (LuckyIrc::*)(lua_State *l)" is incompatible with parameter of type "lua_CFunction" f:\Programming\Visual Studio\C++\IrcBot\IrcBot\LuckyIrc.h   129 4   IrcBot
class 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);
        /*Error happens here*/lua_register(LuaState, "SendMessage", Lua_SendMessage);
        /*And here*/lua_register(LuaState, "SendRaw", Lua_SendRaw);
        /*And here*/lua_register(LuaState, "Quit", Lua_Quit);
        /*And here*/llua_register(LuaState, "Part", Lua_Part);
        /*And here*/lua_register(LuaState, "SendNotice", Lua_SendNotice);
        /*And here*/lua_register(LuaState, "SendAction", Lua_SendAction);
        /*And here*/llua_register(LuaState, "SetNick", Lua_SendNick);
        /*And here*/llua_register(LuaState, "Join", Lua_Join);
        /*And here*/llua_register(LuaState, "Kick", Lua_Kick);
        /*And here*/llua_register(LuaState, "Connect", Lua_Connect);
    }
}