我试图编写自己的排序函数,可以对矢量容器进行排序。
我希望以下列方式打电话:
this:sort(arr.begin(),arr.end() - 1)
arr.end() - 1 - 因为arr.end()返回下一个元素,实际上不是元素,将迭代器返回到结束。
所以我想用任何类型的iterator调用我的函数。我试着运行这段代码:
#include<iostream>
#include<vector>
using namespace std;
template<typename T1>
void func(vector<T1>::iterator it) {
cout << "\n" << *it;
}
int main() {
vector<int> arr(10);
for(int i = 0;i < 10;++i)
arr[i] = i+1;
func<int>(arr.begin());
}
但是编译器说:
main.cpp:10:23: error: variable or field ‘func’ declared void void func(vector<T1>::iterator it)
main.cpp:10:32: error: expected ‘)’ before ‘it’ void func(vector<T1>::iterator it)
main.cpp: In function ‘int main()’: main.cpp:26:5: error: ‘func’ was not declared in this scope
func<int>(arr.begin());
func main.cpp:26:10: error: expected primary-expression before ‘int’
func<int>(arr.begin());
请解释我的错误。谢谢
答案 0 :(得分:1)
编译器不知道迭代器是vector<T1>
template<typename T1> void func(typename vector<T1>::iterator it) {
cout << "\n" << *it; }
在模板内部,一些构造具有可能不同的语义 从一个实例到另一个实例。这样的结构取决于 模板参数。
您应该为此类依赖类型编写typename
。