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

清泛原创

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

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部