error C2780: 'void __cdecl std::sort(_RI,_RI,_Pr)' : expects 3 arguments - 2 provided

来源:清泛原创     2016-08-29 17:07:48    人气:     我有话说( 0 人参与)

prog7.cpp(8) :error C2780:'void __cdecl std::sort(_RI,_RI,_Pr)' : expects 3 arguments - 2 provided C: Pr...

prog7.cpp(8) : error C2780'void __cdecl std::sort(_RI,_RI,_Pr)' : expects 3 arguments - 2 provided

C:\Program Files\Microsoft Visual Studio\VC98\include\algorithm(588) : see declaration of 'sort'
prog7.cpp(8) : error C2782: 'void __cdecl std::sort(_RI,_RI)' : template parameter '_RI' is ambiguous could be 'class std::reverse_iterator<int *,int,int &,int *,int>' or 'int *'
 

代码如下:

#include <iostream>  
#include <algorithm>  
#include <vector>  
using namespace std;  
void main()  
{       
     vector<int> ivec1(10,1);  
     sort(ivec1.begin(), ivec1.rend());//类型不匹配的错误 可以在编译时检查出来  
}

解决方法:

sort函数重载有两个版本,所以出现上面的错误提示,无论哪个版本,要求给定一对迭代器范围,而在标准库中,有输入范围的泛型算法要求其两个迭代器类型完全一样,包括const属性。要么都是const,要么都是非const,否则无法通过编译。

上述的begin函数返回是普通迭代器,而rend函数返回的是反向迭代器,因此两个实参类型不匹配,出现了上述错误,解决方法就是正确的传递实参,使用类型完全一样的迭代器标记范围。

error C2780 C2782

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: