2011-08-30 48 views
4

我试图通过定义为下面的一个地图迭代迭代:“不匹配操作员=”试图通过在地图C++

std::map< size_type, std::pair<size_t, unsigned int> > ridx_; 

现在,我试图通过ridx_迭代(这是在以下朋友函数的类)的私有成员其中重载操作者< <

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; 
} 

然而克++有错误出来:

SMatrix.cpp:34: error: no match for 'operator=' in 'it = m->SMatrix::ridx_.std::map<_Key, _Tp, _Compare, _Alloc>::begin with _Key = unsigned int, _Tp = std::pair, _Compare = std::less, _Alloc = std::allocator > >' /usr/include/c++/4.3/bits/stl_tree.h:152: note: candidates are: std::_Rb_tree_iterator > >& std::_Rb_tree_iterator > >::operator=(const std::_Rb_tree_iterator > >&) make: * [myTest] Error 1

我在做什么错?

回答

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

啊,我明白了,谢谢堆! – Arvin

+1

我梦想有一天,错误消息可以被熟悉C++的人所不熟悉的人阅读。 – 2017-04-03 17:16:24