C++ 错误:对';的调用没有匹配函数;排序';。我如何才能做到这一点,让所有的编译器都满意?
我在一个名为room.cpp的类文件中工作,我在从room.h调用的函数之外创建了函数 我试着使用这样的排序:C++ 错误:对';的调用没有匹配函数;排序';。我如何才能做到这一点,让所有的编译器都满意?,c++,C++,我在一个名为room.cpp的类文件中工作,我在从room.h调用的函数之外创建了函数 我试着使用这样的排序: std::sort(roomLinesSort.begin(), roomLinesSort.end(), time); 代码在我的clang编译器中编译并运行得非常好,但我得到了这样一个结果:错误:当我在学校提供的在线编译器上编译时,没有匹配的函数来调用“sort” 如有任何建议,将不胜感激:) 如果我将它们设置为lambda函数,则在这两个编译器中都可以正常工作,但不允许使用“
std::sort(roomLinesSort.begin(), roomLinesSort.end(), time);
代码在我的clang编译器中编译并运行得非常好,但我得到了这样一个结果:错误:当我在学校提供的在线编译器上编译时,没有匹配的函数来调用“sort”
如有任何建议,将不胜感激:)
如果我将它们设置为lambda函数,则在这两个编译器中都可以正常工作,但不允许使用“auto”进行此分配。在标准库中有
时间
函数(在ctime
头中)。编译器似乎看到了两个函数,一个是您提供的,另一个是来自ctime
头的,并且不清楚应该调用哪个函数
您可以将排序函数的名称从time
更改为someNameDifferentTime。或者,您可以在调用sort时强制转换时间
:
std::sort(roomLinesSort.begin(), roomLinesSort.end(), static_cast<bool(*)(string,string)>(time));
排序(roomLinesSort.begin(),roomLinesSort.end(),static_cast(time));
请参阅rafix07的答案,了解出现问题的原因。但是,如果您使用强制转换,我不会在代码审查中接受该修复 相反,我要求您将该方法重命名为类似于
lessThanByTime
的名称,因为它将提高可读性。特别是如果你还需要一个平等的方法。例如:
std::sort(v.begin(), v.end(), lessThanByTime);
auto newEnd = std::unique(v.begin(), v.end(), equalByTime);
//...
您是否使用
使用名称空间std代码>?
std::sort(v.begin(), v.end(), lessThanByTime);
auto newEnd = std::unique(v.begin(), v.end(), equalByTime);
//...