当我使用如下模板时,g ++将报告错误:
E32.cpp:在函数'void display_vector(const std :: vector&,std :: ostream&,int)'中:
E32.cpp:21:5:错误:在'std :: vector :: const_iterator'之前需要'typename',因为'std :: vector'是一个依赖范围 矢量::为const_iterator ^
template <typename elemType>
void display_vector(const vector<elemType> &vec,
ostream &os=cout, int len=8)
{
vector<elemType>::const_iterator
iter = vec.begin(),
end_it = vec.end();
int elem_cnt = 1;
while(iter != end_it)
{
os << *iter++ << (!(elem_cnt++ % len)?'\n':' ');
}
os << endl;
}
为什么呢?我无法弄清楚......
答案 0 :(得分:1)
在此处使用typename
:
typename vector<elemType>::const_iterator
因为const_iterator
是从属名称(也显示在错误消息中)。搜索此站点以了解有关dependent-name的更多信息。
更好地使用auto
和基于范围的循环。