我正在尝试迭代定义如下的地图:
std::map< size_type, std::pair<size_t, unsigned int> > ridx_;
现在我试图在以下友元函数中迭代ridx_(这是一个类的私有成员),该函数重载运算符&lt;&lt;
std::ostream& operator<<(std::ostream &os, const SMatrix &m)
{
std::map< size_type, std::pair<size_t, unsigned int> >::iterator it;
//The following is line 34
for (it = m.ridx_.begin(); it != m.ridx_.end(); it++)
os << it->first << endl;
return os;
}
然而g ++出错了:
SMatrix.cpp:34:错误:'it =中的'operator ='不匹配 m-&gt; SMatrix :: ridx_.std :: map&lt; _Key,_Tp,_Compare,_ Alloc&gt; ::开头 _Key = unsigned int,_Tp = std :: pair, _Compare = std :: less,_ Alloc = std :: allocator&gt; &GT;” /usr/include/c++/4.3/bits/stl_tree.h:152:注意: 候选人是:std :: _ Rb_tree_iterator&gt; &GT;&安培; std :: _ Rb_tree_iterator&gt; &GT; ::运算符=(const的 std :: _ Rb_tree_iterator&gt; &gt;&amp;)make: * [myTest]错误1
我做错了什么?
答案 0 :(得分:12)
由于m
(因此m.ridx_
)是常量,因此您必须使用std::map< size_type, std::pair<size_t, unsigned int> >::const_iterator
,而不是::iterator
。
如果您使用的是C ++ 0x编译器,您可能还需要考虑使用auto
:
for (auto it = m.ridx_.begin(); it != m.ridx_.end(); it++)