Arv*_*vin 4 c++ iterator compiler-errors const map
我正在尝试迭代定义如下的地图:
std::map< size_type, std::pair<size_t, unsigned int> > ridx_;
Run Code Online (Sandbox Code Playgroud)
现在我试图在以下友元函数中迭代ridx_(这是类的私有成员),该函数重载operator <<
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;
}
Run Code Online (Sandbox Code Playgroud)
但是g ++出错了:
SMatrix.cpp:34:错误:'it = m-> SMatrix :: ridx_.std :: map <_Key,_Tp,_Compare,_Alloc> ::以_Key = unsigned int,_Tp开头的'operator ='不匹配= std :: pair,_Compare = std :: less,_Alloc = std :: allocator >>'/usr/include/c++/4.3/bits/stl_tree.h:152:注意:候选人是:std :: _ Rb_tree_iterator >> &std :: _ Rb_tree_iterator >> :: operator =(const std :: _ Rb_tree_iterator >> &&)make:* [myTest]错误1
我究竟做错了什么?
bdo*_*lan 12
因为m(因此m.ridx_)是const,你必须使用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++)
Run Code Online (Sandbox Code Playgroud)