C ++ - 关于模板

时间:2015-01-03 05:38:09

标签: c++ templates

当我使用如下模板时,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;
}

为什么呢?我无法弄清楚......

1 个答案:

答案 0 :(得分:1)

在此处使用typename

typename vector<elemType>::const_iterator

因为const_iterator是从属名称(也显示在错误消息中)。搜索此站点以了解有关dependent-name的更多信息。

更好地使用auto和基于范围的循环。