C++ luabind不更改指针mingw
我已经修复了中的链接器错误,但现在我遇到了另一个问题。我通过在lua中调用C++ luabind不更改指针mingw,c++,mingw,shared-ptr,luabind,C++,Mingw,Shared Ptr,Luabind,我已经修复了中的链接器错误,但现在我遇到了另一个问题。我通过在lua中调用createObject()来创建我的对象,这将为一个新对象创建一个boost::shared\u ptr,并将其添加到列表中,然后返回它 当我在LUA中做了更改时,在Windows上使用了MINW,这些更改没有被应用到C++对象。我的代码不会有问题,因为我在Linux上构建了同样的东西,并且运行良好 ObjectPtr createObject(PlayerPtr player){ ObjectPtr obj(n
createObject()
来创建我的对象,这将为一个新对象创建一个boost::shared\u ptr,并将其添加到列表中,然后返回它
当我在LUA中做了更改时,在Windows上使用了MINW,这些更改没有被应用到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;
}
结果在控制台中显示“红色”。
但是在C++中,值只是“”。
我调试了它,对象确实被创建并添加到C++中的列表中,但是没有任何改变,因为所有的变量都处于缺省状态。
我认为这是luabind和mingw的问题,或者只是结构有问题
我从默认构建设置中更改的唯一一件事是,我需要做两件事来编译它:我在jamfile中设置LUA_路径以指向LUA所在的目录(而不是从环境变量中获取),然后我更改了
#elif BOOST_PP_ITERATION_FLAGS() == 1
到
因为mingw不喜欢(
出于某种原因…(是的,我确实在正确的位置添加了#endif)
更新:我也尝试过使用msvc10,但它仍然存在同样的问题。我也尝试过用我的Linux上相同版本的boost构建它。但没有效果。像你那样更改
#elif
是正常的(最近的一次boost更改破坏了Luabind)而且很可能与你的问题无关。@LucDanton我不这么认为,但我想我应该提供所有与构建相关的信息,以防万一。如果我可以得到预构建的二进制文件,那就最好了,但我搜索了很长一段时间都没有用。。。
#elif BOOST_PP_ITERATION_FLAGS() == 1
#else
#if BOOST_PP_ITERATION_FLAGS() == 1