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
     ^



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/

10-11 23:20
查看更多