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函数返回的是反向迭代器,因此两个实参类型不匹配,出现了上述错误,解决方法就是正确的传递实参,使用类型完全一样的迭代器标记范围。
上一篇:fatal error "vector iterator + offset out of range" "standard C++ libraries out of range"
下一篇:error C2804:binary 'operator +' has too many parameters