LuaBind 断言(assert):id 必须小于本地 id 基数(local_id_base)。

我一直在苦苦挣扎。 每次我试图在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,创建一个库,而不是两个单独的库。

点赞
用户233522
用户233522

你的类是局部的,因此无法在 LuaBind 的模板中可见。将该类移出 main() 函数。

如果这样仍未解决问题,请检查是否正确构建了 LuaBind - http://www.ogre3d.org/forums/viewtopic.php?f=2&t=75829

2013-06-03 20:14:59