尝试将函数绑定(bind)到 lua 时出现 C++ 错误

标签 c++ c lua

我想我找到了答案,很快就会返回结果

我收到此错误并且不知道如何在没有静态方法的情况下修复它。如果它们是静态的,我不会收到错误,但我无法使用我的任何非静态变量或函数。另外,在您说这可能是 int 和 lua_CFunction 是不同的类型之前,它们不是。下面是 lua_CFunction 的定义

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

*

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);
    }
}

最佳答案

lua_register 只直接支持free functions(或者static methods,除了可见性之外都是一样的)。所以,你必须找到另一种方法来传递你的对象指针。如果您只需要一个单例(即您希望为脚本函数的所有调用共享相同的状态),最简单的方法是私有(private)静态变量(实例指针)。

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

关于尝试将函数绑定(bind)到 lua 时出现 C++ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17093905/

相关文章:

c++ - 解决 sphinx 中此问题的想法

c - 读取 mini-XML 2.7 中的多行字段时出现问题

字符指针和 printf 2

loops - 如何在lua中迭代表中的元素对

lua - 下面的Lua迭代器是无状态的吗?

c++ - VS2008下Protocol Buffer错误C2059

c++ - 为什么以及何时应该在 C/C++ 中使用 goto?

c - 从 c 运行整个 lua 脚本

c++向网络服务器上的API发送请求然后接收json数组响应?

c - C中的三重des cbc加密