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. но безрезультатно.