我有一个图表类,它使用一个地图和另一个嵌套在里面的地图,因此(V是我的模板):
map< V , map< V , int> > vertices;
这样定义一个迭代器似乎没问题:
typename map< V, map< V , int>::iterator i;
但是当我尝试使用那个迭代器时,就像这个i = vertices.begin()
一样,我得到一个看起来像这样的长错误。 (main.cpp 81是我调用迭代方法的地方)。我在哪里可以找到什么是错的?
main.cpp:81: instantiated from here
graph.h:326: error: no match for ‘operator=’ in ‘i = ((const GraphNameSpace::Graph<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)this)->GraphNameSpace::Graph<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::vertices.std::map<_Key, _Tp, _Compare, _Alloc>::begin [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > > > >]()’
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_tree.h:152: note: candidates are: std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > > > >& std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > > > >::operator=(const std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > > > >&)
make: *** [main.o] Error 1
更新:
提供太多信息的风险,这是我的graph class on pastebin。在dump
函数的最底部,我正在尝试进行迭代。
答案 0 :(得分:5)
您在其中编写dump()
的成员函数i = vertices.begin()
是const
成员函数,它有效地使vertices
成为const
个对象,因为它是班上的一员。所以你需要const_iterator
:
typename map<V, map<V, int> >::const_iterator i;
//^^^^^ note this
现在应该可以了。 : - )