我真的不明白为什么这段代码
#include <map>
template<typename T, typename U> std::ostream& operator<<(std::ostream& o,
const std::map<T,U>& input)
{
for (std::map<typename T,typename U>::iterator it=input.begin(); it!=input.end(); ++it)
{
o << it->first << " => " << it->second << '\n';
}
return o;
}
返回此编译错误:
error: wrong number of template arguments (1, should be 4)
error: provided for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’
任何人都可以帮助我吗?
答案 0 :(得分:4)
您应该在迭代器声明之前编写typename并使用const_iterator:
for (typename std::map<T,U>::const_iterator it=input.begin(); it!=input.end(); ++it
运算符的参数&lt;&lt;需要const对象。所以地图的元素必须是const。要实现这一点,需要使用const_iterator。 迭代器声明中的typename需要指示以下表达式是嵌套模板类,具体取决于类型T和U.