如何让Luabind属性工作?

时间:2013-02-15 01:53:03

标签: c++ luabind

我在导入类时尝试使用Luabind的属性。我确定这些定义都是正确的,但是当我调用一个属性时,比如打印它,如果它是一个字符串或数字,我得到这样的东西

  

功能:009EC440

现在我不知道为什么会发生这种情况,但我已经在互联网上四处寻找并发现了几个有同样问题的人。他们说你应该用这些参数构建Luabind:

  

bjam toolset = msvc-9.0 variant = debug threading = multi link = shared define = _BIND_TO_CURRENT_VCLIBS_VERSION

现在我尝试了这个,但我仍然得到同样的错误。另外需要注意的是我正在使用MSVC 2012,因此我尝试使用toolset = msvc-11.0构建它,但是再次无济于事。我已经读过你需要定义LUABIND_DYNAMIC_LINK,如果你没有使用Boost构建来构建你的项目,我在Luabind的包含之前也做过。这仍然会导致此错误。我也试过自己构建Luabind,但是因为它引发了许多符号错误而导致连接它时遇到了麻烦(我不知道在哪里定义LUABIND_DYNAMIC_LINK,所以如果有人知道这可能会解决问题)。有谁知道如何解决这个问题?


以下是声明属性的代码:

luabind::module(luaState)[
luabind::class_<Weapon>("Weapon")
    .def(luabind::constructor<float, float>())
    .def_readwrite("onFire", &Weapon::onFireFunc)
    .def_readonly("modifier", &Weapon::modifier)
];

他们正试图像这样被访问,武器是Weapon类的一个实例,正如它的构造函数所声明的那样:

print(weapon.modifier)
weapon.onFire = onFire

静态链接工作,但我想使用这些参数使其与动态链接一起使用:

  

bjam toolset = msvc-9.0 variant = debug threading = multi link = static define = _BIND_TO_CURRENT_VCLIBS_VERSION

1 个答案:

答案 0 :(得分:1)

我在VS2008上遇到了同样的问题。 (这是帖子后的6个月,但可以帮助其他人

我通过添加LUABIND_DYNAMIC_LINK预处理程序指令来修复它。

<强>项目 - &GT;属性 - &GT; C / C ++ - &GT;预处理

LUABIND_DYNAMIC_LINK 添加到预处理程序定义列表中。

我使用你帖子顶部的bjam命令构建了luabind。