This question already has answers here:
Where and why do I have to put the “template” and “typename” keywords?
(6个答案)
4年前关闭。
当我使用以下模板时,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
^
为什么?我不知道...
因为
最好使用
(6个答案)
4年前关闭。
当我使用以下模板时,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;
}
为什么?我不知道...
最佳答案
在此处使用typename
:
typename vector<elemType>::const_iterator
因为
const_iterator
是从属名称(错误消息中也显示了该名称)。搜索此站点以了解有关依赖名称的更多信息。最好使用
auto
和基于范围的for循环。关于c++ - C++-关于模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27752081/