我为任意模板迭代器构建了一个模板,但它没有工作,我也无法弄清楚为什么......有人可以帮助我吗?
模板:
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
}
}
显示的错误是:
有人可以帮助我吗?谢谢:))
答案 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
}
}