Luabind не вносит изменения в указатель MINGW

Я исправил ошибки компоновщика, которые у меня были в этом вопросе, но теперь у меня возникла другая проблема. Я создаю свои объекты, вызывая createObject() в lua, и это создает boost::shared_ptr для нового объекта, добавляет его в список и возвращает его.

На окнах с mingw, когда я делаю изменения в 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);

    // initialize some other classes here.

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

ObjectPtr а также PlayerPtr являются boost::shared_ptr Object и Player, window является указателем статического окна, и createPlayer() такой же как createObject() без каких-либо аргументов и использования Player вместо Object,

в луа:

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, или просто что-то не так со сборкой,

единственными вещами, которые я изменил из настроек сборки по умолчанию, были две вещи, которые мне нужно было сделать, чтобы он вообще компилировался: я установил LUA_PATH в jamfile, чтобы он указывал на каталог, в котором находится lua (вместо того, чтобы получать его из переменной окружения), и Я изменился

#elif BOOST_PP_ITERATION_FLAGS() == 1

в

#else
#if BOOST_PP_ITERATION_FLAGS() == 1

потому что Mingw не понравилось ( по какой-то причине... (и да, я добавил #endif в нужном месте)

ОБНОВЛЕНИЕ: я попытался использовать msvc10 также, и он все еще имеет ту же проблему. Я также пытался собрать его с той же версией буста, что и на моем Linux. но безрезультатно.

0 ответов

Другие вопросы по тегам