可能重复:
在哪里,为什么我必须把“模板”和“类型名称”关键字?
C ++模板类型名称迭代器
下面的代码不会编译:
#include <iostream>
#include <set>
using namespace std;
template<class T>
void printSet(set<T> s){
set<T>::iterator it;
}
int main(int argc, char** argv){
set<int> s;
printSet<int>(s);
return 0;
}
我得到一个错误说:
set.cpp: In function ‘void printSet(std::set<T, std::less<_Key>, std::allocator<_CharT> >)’:
set.cpp:7: error: expected `;' before ‘it’
set.cpp: In function ‘void printSet(std::set<T, std::less<_Key>, std::allocator<_CharT> >) [with T = int]’:
set.cpp:12: instantiated from here
set.cpp:7: error: dependent-name ‘std::set<T,std::less<_Key>,std::allocator<_CharT> >::iterator’ is parsed as a non-type, but instantiation yields a type
set.cpp:7: note: say ‘typename std::set<T,std::less<_Key>,std::allocator<_CharT> >::iterator’ if a type is meant
我做错了什么? 我觉得我已经几乎没有写过什么,并已C ++给了我这个可怕的消息。
如果它是有帮助的,它看起来像,如果我注释掉符合迭代器,没有错误。 不过,我在网上看到的所有例子到目前为止似乎声明迭代器这种方式。 我认为。