Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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++ &引用;二进制表达式“”的操作数无效;使用std::sort时_C++_Sorting_Std - Fatal编程技术网

C++ &引用;二进制表达式“”的操作数无效;使用std::sort时

C++ &引用;二进制表达式“”的操作数无效;使用std::sort时,c++,sorting,std,C++,Sorting,Std,当我试图编译一个使用std::sort的项目时,我得到了错误二进制表达式的无效操作数 我使用std::排序如下: vector <record> vrec; ... sort(vrec.begin(), vrec.end()); bool operator< (record &r1, record &r2) { ... } bool operator< (const record &r1, const record &r2) { ...

当我试图编译一个使用std::sort的项目时,我得到了错误
二进制表达式的无效操作数

我使用std::排序如下:

vector <record> vrec;
...
sort(vrec.begin(), vrec.end());
bool operator< (record &r1, record &r2) { ... }
bool operator< (const record &r1, const record &r2)
{ ... }
向量vrec;
...
排序(vrec.begin(),vrec.end());
我已经像这样重载了<操作符:

vector <record> vrec;
...
sort(vrec.begin(), vrec.end());
bool operator< (record &r1, record &r2) { ... }
bool operator< (const record &r1, const record &r2)
{ ... }
bool运算符<(记录&r1,记录&r2){…}
这是我收到的错误信息的摘录:

invalid operands to binary expression ('const record' and 'const record')

operator()(const _T1& __x, const _T1& __y) const {return __x < __y;}

                                                         ~~~ ^ ~~~
二进制表达式的操作数无效('const-record'和'const-record')
运算符()
~~~ ^ ~~~

运算符您的比较运算符的签名与std::less期望的:常量引用参数不匹配

sort3a.cpp:127:6:注意:候选函数不可行:第一个参数(“常量记录”)将丢失常量限定符
bool操作员<(记录和r1,记录和r2)

试着像这样重新定义它:

vector <record> vrec;
...
sort(vrec.begin(), vrec.end());
bool operator< (record &r1, record &r2) { ... }
bool operator< (const record &r1, const record &r2)
{ ... }
bool运算符<(常量记录和r1、常量记录和r2)
{ ... }

发布您的错误。我们这些奇怪的人能读懂你奇怪的错误。水晶球仍然阴云密布。运算符应该是一个全局函数,对其参数进行
const
引用。不过,您的问题需要是“开”,而不是“开”PasteBin@cardinals7879确切地我不知道,但一个很好的近似原因是你问了一个问题,1。缺乏研究努力(这是一个极为常见的错误,重复了无数次),2。你没有提供足够的信息来推断错误,3。即使你这么做了,你还是强迫我们去外部网站查看代码,这表明4。你没有阅读网站的常见问题。为什么?我认为这是很好的风格,但一点也不好required@sehe:我不确定是否需要它,但GCC的
std::sort
实现确实需要它。@sehe
operator()
签名是
bool(const&,const&)
。它使用
运算符。我忘了
std::less
是第一个中继到
operator@Manu343726但是
std::sort
不使用
std::less
,而是使用
运算符