Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:对';的调用没有匹配函数;排序';。我如何才能做到这一点,让所有的编译器都满意?_C++ - Fatal编程技术网

C++ 错误:对';的调用没有匹配函数;排序';。我如何才能做到这一点,让所有的编译器都满意?

C++ 错误:对';的调用没有匹配函数;排序';。我如何才能做到这一点,让所有的编译器都满意?,c++,C++,我在一个名为room.cpp的类文件中工作,我在从room.h调用的函数之外创建了函数 我试着使用这样的排序: std::sort(roomLinesSort.begin(), roomLinesSort.end(), time); 代码在我的clang编译器中编译并运行得非常好,但我得到了这样一个结果:错误:当我在学校提供的在线编译器上编译时,没有匹配的函数来调用“sort” 如有任何建议,将不胜感激:) 如果我将它们设置为lambda函数,则在这两个编译器中都可以正常工作,但不允许使用“

我在一个名为room.cpp的类文件中工作,我在从room.h调用的函数之外创建了函数

我试着使用这样的排序:

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);
//...