“不匹配operator =”试图在C ++中迭代map

时间:2011-08-30 04:10:13

标签: c++ map iterator compiler-errors const

我正在尝试迭代定义如下的地图:

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

我做错了什么?

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++)