1

答えを見つけたと思います。すぐに結果を返します

このエラーが発生し、メソッドを静的にしないで修正する方法がわかりません。それらが静的である場合、エラーは発生しませんが、非静的変数または関数を使用できません。また、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);
    }
}
4

1 に答える 1

0

lua_registerフリー関数 (または可視性以外は同じ静的メソッド) のみを直接サポートします。そのため、オブジェクト ポインターを渡す別の方法を見つける必要があります。シングルトンだけが必要な場合 (つまり、スクリプト関数のすべての呼び出しで同じ状態を共有したい場合)、最も簡単な方法はプライベートな静的変数 (インスタンス ポインター) です。

また、luabind ライブラリを使用して、カスタム関数とクラスのバインドをより簡単にすることもできます。

于 2013-06-13T20:06:13.850 に答える