首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSVC 10 + Luabind +std::向量==拒绝编译

MSVC 10 + Luabind +std::向量==拒绝编译
EN

Stack Overflow用户
提问于 2010-09-02 06:31:54
回答 2查看 727关注 0票数 2

所以,我有一个代码,编译在MSVC 9和以前的一些(不知道它有多早.),GCC,MingW,GCC在Mac.

但是有一行没有在MSVC上编译:

代码语言:javascript
复制
class_< vector<unsigned int> >("LayerList")
.def(constructor<>())
.def("GetCount", &vector<unsigned int>::size)
.def("Get",  &NumberGet)
.def("Add", &vector<unsigned int>::push_back) //this line refuses to compile
.def("__tostring", &LayerListToString)

如果我注释它,应用程序编译很好(但在运行时中断),如果我将这个块移动到其他地方(即使是在其他文件中),那么这个特定的行会不断地产生错误.更改块内的顺序也解决不了问题。

它给出了9个错误,其中大多数是关于.def中错误数量的参数(一些人说,当它期望1、3、5和一个说“太多的参数”时,有2个参数),还有一些关于重载失败的错误,其中最明显的是:

错误7错误E:\novashellSVN\clanlibstuff\novashell\source\ListBindings.cpp C2914:'luabind::class_::def‘:无法推断模板参数,因为函数参数是含糊不清的

这让我浪费了一整天的工作..。有人知道是什么改变了MSVC 10导致了这一点吗?它甚至不再是困扰我的工作卡住,而是因为它是多么令人费解和奇怪。

编辑:我比较了“向量”文件,从MSVC 10,与其他MSVC和GCC,实际上在MSVC有3个版本,有人确切知道我如何使它加载一个特定的版本?

这三个版本:

代码语言:javascript
复制
void push_back(const _Ty& _Val) //the one in GCC and older MSVC, thus the one I want
void push_back(_Ty&& _Val)
void push_back(bool _Val)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-02 09:19:55

如果您有重载的函数,则必须通过将"&vector::push_back“转换为正确的函数来指定要使用的函数。您必须检查luabind文档的语法。

也许现在有几种名为"push_back“的方法,您必须指定使用哪一种方法?

票数 0
EN

Stack Overflow用户

发布于 2010-09-02 14:54:19

正如Nikko所说,您必须选择正确的重载。这是一点C++皮塔。

使用static_cast<>将push_back转换为正确类型的ptr到mem。例如,如下所示:

代码语言:javascript
复制
.def("push_back", static_cast<void (std::vector<unsigned int>::*)(const unsigned int)>(&std::vector<unsigned int>::push_back))

(不能百分之百确定细节,但这是总的要点.)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3624306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档