C++ - 关于模板
C++ - About template
当我使用如下模板时,g++会报错:
E32.cpp: 在函数‘void display_vector(const std::vector&, std::ostream&, int)’中:
E32.cpp:21:5: 错误:在‘std::vector::const_iterator’之前需要‘typename’,因为‘std::vector’是一个依赖范围
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;
}
为什么?我想不通...
此处使用typename
:
typename vector<elemType>::const_iterator
因为const_iterator
是一个从属名(也显示在错误信息中)。搜索此站点以了解有关 dependent-name 的更多信息。
最好使用 auto
和基于范围的 for 循环。
当我使用如下模板时,g++会报错:
E32.cpp: 在函数‘void display_vector(const std::vector&, std::ostream&, int)’中:
E32.cpp:21:5: 错误:在‘std::vector::const_iterator’之前需要‘typename’,因为‘std::vector’是一个依赖范围 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;
}
为什么?我想不通...
此处使用typename
:
typename vector<elemType>::const_iterator
因为const_iterator
是一个从属名(也显示在错误信息中)。搜索此站点以了解有关 dependent-name 的更多信息。
最好使用 auto
和基于范围的 for 循环。