所以,我有一个代码,编译在MSVC 9和一些以前(dunno它有多远...),GCC,MingW,GCC在Mac上......
但有一行,不能在MSVC上编译:
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中错误的参数数量(有人说有2个参数,当它预期1,3,5和1表示“参数太多”时),还有一些关于重载失败,最明显的一个:
错误7错误C2914:'luabind :: class _ :: def':无法推断模板参数,因为函数参数是ambiguou E:\ novashellSVN \ clanlibstuff \ novashell \ source \ ListBindings.cpp 178
这让我浪费了整个工作日...有人对MSVC 10上发生了什么变化有任何线索吗?它不再是因为工作陷入困境而烦恼我,而是因为它是多么令人费解和奇怪。
编辑:我将MSVC 10中的“vector”文件与其他MSVC和GCC进行了比较,实际上在MSVC中它有3个版本,有人确切知道我是如何加载特定版本的吗?三个版本:
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)
答案 0 :(得分:1)
正如日光所说,你必须选择正确的过载。这是一些C ++ PITA。
使用static_cast&lt;&gt;将push_back转换为正确类型的ptr-to-mem-fn。如下所示:
.def("push_back", static_cast<void (std::vector<unsigned int>::*)(const unsigned int)>(&std::vector<unsigned int>::push_back))
(不是100%确定细节,但这就是它的一般要点......)
答案 1 :(得分:0)
如果您有重载函数,则必须通过将“&amp; vector :: push_back”强制转换为正确的函数来指定要使用的函数。您必须检查luabind文档的语法。
也许现在有几个名为“push_back”的方法,你必须指定使用哪一个?