luabind没有对指针进行任何更改,mingw

我已经解决了我在this question中遇到的链接器错误,但是现在我又遇到了另一个问题。我通过在lua中调用createObject()来创建我的对象,这将创建一个指向新对象的boost::shared_ptr,将其添加到列表中,并将其返回。

在mingw上的windows中,当我更改lua中的代码时,更改不会应用到C ++对象上。它不可能是我的代码的问题,因为我在Linux上构建了相同的东西,它可以正常工作。

ObjectPtr createObject(PlayerPtr player){
    ObjectPtr obj(new Object(player));
    window->world.objects.push_back(obj);
    return obj;
}

bool setup(lua_State* luastate, Window* caller){
    open(luastate);

    // 在这里初始化一些其他类。

    class_<Player, PlayerPtr> Player("Player");
    Player.def_readwrite("playerColor", &Player::playerColor);
    Player.def_readwrite("displayName", &Player::displayName);

    class_<Object, ObjectPtr> Object("WorldObject");
    Object.def_readwrite("health", &Object::health);
    Object.def_readwrite("maxHealth", &Object::maxHealth);
    Object.def_readwrite("mesh", &Object::mesh);
    Object.def_readwrite("location", &Object::location);
    Object.property("player", &Object::getPlayer, &Object::setPlayer);
    Object.def("setOnDeath", &Object::setOnDeath);

    module(luastate)[
        vec3,
        color,
        Player,
        WorldObject,
        def("isWindowOpen", &isWindowOpen),
        def("loadMesh", &MeshManager::LoadMesh),
        def("createObject", &createObject),
        def("createPlayer", &createPlayer),
        ];

    window = caller;
}

ObjectPtrPlayerPtr是Object和Player的boost::shared_ptrwindow是一个静态的Window指针,createPlayer()createObject()相同,没有参数,并且使用Player而不是Object。

在lua中:

red = createPlayer()
red.playerColor = Color(255,0,0)
red.displayName = "Red"

obj = createObject(red)
obj.location = vec3(10,10,0)

print(obj.player.displayName)

会把"Red"放入控制台中。但在C++中,该值只是""。

我调试了它,并且对象确实在C++中创建并添加到列表中,但是从未进行过任何更改,因为所有变量都处于其默认状态。

我认为这是luabind和mingw的问题,或者只是构建时出了一些问题,

我从默认的构建设置中只更改了两个我_需要_执行的操作,以使其编译:我在jamfile中设置了LUA_PATH以指向lua所在的目录(而不是从环境变量中获取它),并且我改变了

#elif BOOST_PP_ITERATION_FLAGS() == 1

变成

#else
#if BOOST_PP_ITERATION_FLAGS() == 1

因为mingw出了些问题,不能识别...(是的,我确实在正确的位置添加了# endif)。

更新:我已经尝试使用msvc10,并且仍然具有相同的问题。我还尝试根据我的Linux上有的相同版本的boost来构建它。但无济于事。

点赞