#c
#c
Вопрос:
У меня есть класс graph, который использует две размерные вершины, используя карту с вложенной внутри другой картой, как таковой (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> > > > >amp; 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> > > > >amp;)
make: *** [main.o] Error 1
Обновить:
Рискуя предоставить слишком много информации, вот мой класс graph на pastebin. Прямо в самом низу dump
функции я пытаюсь выполнить итерацию.
Ответ №1:
Функция-член dump()
, внутри которой вы пишете i = vertices.begin()
, является const
функцией-членом, которая эффективно создает vertices
const
объект, поскольку она является членом класса. Итак, вам нужно const_iterator
:
typename map<V, map<V, int> >::const_iterator i;
//^^^^^ note this
Теперь это должно сработать. 🙂