1

私はかなり長い間苦労してきました。luabind でクラスを定義しようとするたびに、アサーション エラーが発生します。

assert( id < local_id_base ) in inheritance.hpp (luabind)

私はさまざまな luabind フォークを試しましたが、成功しませんでした。それらはすべてboost 1.53およびVisual Studio 2012でコンパイルされていますが、lua 5.2.1でも

これは私が使用しているコードです。

extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}

#include <luabind/luabind.hpp>
#include <luabind/class.hpp>
#include <luabind/function.hpp>
#include <luabind/object.hpp>


    class TestStruct 
    {
    public:
        TestStruct(const std::string& s): m_string(s) {}
        void printmsg() { printf("Works"); };
    private:
        int i; 
        std::string m_string;
    };


int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                       _In_opt_ HINSTANCE hPrevInstance,
                       _In_ LPTSTR    lpCmdLine,
                       _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    lua_State* L = luaL_newstate();

    luaopen_io (L);
    luaopen_base(L);
    luaopen_table(L);
    luaopen_string(L);
    luaopen_math(L);

    using namespace luabind;

    open(L);

    module(L)
        [
            class_<TestStruct>("TestStruct")
            .def(constructor<const std::string&>())
            .def("printmsg", &TestStruct::printmsg)


        ];


    lua_close(L);

    return 0;
}

[解決済み]

周りを読んだ後、私はほとんどどこにも行きませんでした。そこで私がしたことは、同じプロジェクトで LuaBind と Lua 5.2.2 をビルドし、2 つの別々のライブラリではなく 1 つのライブラリを作成することでした。

4

1 に答える 1

0

クラスはローカルであるため、LuaBind のテンプレートには表示されません。クラスを の外に移動しmain()ます。

それでも問題が解決しない場合は、LuaBind を正しくビルドしたかどうかを確認してください - http://www.ogre3d.org/forums/viewtopic.php?f=2&t=75829

于 2013-06-03T20:14:59.087 に答える