c ++模板迭代地图

时间:2014-08-11 15:02:12

标签: c++

我为任意模板迭代器构建了一个模板,但它没有工作,我也无法弄清楚为什么......有人可以帮助我吗?

模板:

template<typename type1,typename type2>
void printmap(map<type1,type2>&thismap)
{
    for(map<type1,type2>::iterator it = thismap.begin(); it != thismap.end(); ++it)
    {
        //do something
    }
}

显示的错误是:

enter image description here

有人可以帮助我吗?谢谢:))

3 个答案:

答案 0 :(得分:9)

轻松飘逸,名字:

for(typename map<type1,type2>::iterator it = thismap.begin(); it != thismap.end(); ++it)

原因是:

  

在合格的依赖类型之前,您需要typename

有关详细信息,请参阅Here

或者,您可以在循环外部使用typedef使其更具可读性:

typedef typename map<type1, type2>::iterator mapIt;
for(mapIt it = thismap.begin(); it != thismap.end(); ++it){
    ...
}

答案 1 :(得分:3)

如果你有更高的c ++ 11,你也可以改变

for(map<type1,type2>::iterator it = thismap.begin(); it != thismap.end(); ++it) 

for(auto it = thismap.begin(); it != thismap.end(); ++it)

答案 2 :(得分:1)

编译器不知道map<type1,type2>::iterator是一种类型。 只需添加 typename

template<typename type1,typename type2>
void printmap(map<type1,type2>&thismap)
{
    for(typename map<type1,type2>::iterator it = thismap.begin(); it != thismap.end(); ++it)
    {
        //do something
    }
}