所以,我有一个代码,编译在MSVC 9和以前的一些(不知道它有多早.),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中错误数量的参数(一些人说,当它期望1、3、5和一个说“太多的参数”时,有2个参数),还有一些关于重载失败的错误,其中最明显的是:
错误7错误E:\novashellSVN\clanlibstuff\novashell\source\ListBindings.cpp C2914:'luabind::class_::def‘:无法推断模板参数,因为函数参数是含糊不清的
这让我浪费了一整天的工作..。有人知道是什么改变了MSVC 10导致了这一点吗?它甚至不再是困扰我的工作卡住,而是因为它是多么令人费解和奇怪。
编辑:我比较了“向量”文件,从MSVC 10,与其他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)发布于 2010-09-02 09:19:55
如果您有重载的函数,则必须通过将"&vector::push_back“转换为正确的函数来指定要使用的函数。您必须检查luabind文档的语法。
也许现在有几种名为"push_back“的方法,您必须指定使用哪一种方法?
发布于 2010-09-02 14:54:19
正如Nikko所说,您必须选择正确的重载。这是一点C++皮塔。
使用static_cast<>将push_back转换为正确类型的ptr到mem。例如,如下所示:
.def("push_back", static_cast<void (std::vector<unsigned int>::*)(const unsigned int)>(&std::vector<unsigned int>::push_back))(不能百分之百确定细节,但这是总的要点.)
https://stackoverflow.com/questions/3624306
复制相似问题