const_iterator для итератора C ++ Ошибка - PullRequest
4 голосов
/ 07 декабря 2011

Я пытаюсь выполнить итерацию по объекту map, используя следующий фрагмент кода:

for(map<int, vector>::iterator table_iter = table.being(); table_iter != table.end(); table_iter++)
{
    ...
}

И я получаю сообщения об ошибках:

преобразование изЗапрошен const_iterator для итератора нескалярного типа

И я не могу определить, почему итератор будет const вместо not- const или как с этим справиться.*

Ответы [ 4 ]

8 голосов
/ 07 декабря 2011

Вместо этого используйте map<int, vector>::const_iterator, которое возвращается map::begin.

2 голосов
/ 07 декабря 2011

Похоже, table является const объектом или ссылкой, в этом случае begin возвращает const_iterator. Измените цикл for на этот:

// typedefs make for an easier live, note const_iterator
typedef map<int, vector>::const_iterator iter_type;
for(iter_type table_iter = table.being(); table_iter != table.end(); table_iter++)
{
    ...
}
1 голос
/ 13 января 2014

Ну, на ваш вопрос был получен частичный ответ.

"И я не могу определить, почему итератор будет const vs. not-const, или как с этим бороться".Как ответили другие, если ваша таблица определена как константа, вам нужно определить константный итератор.Чего не хватало, так это того, что если функция определена как const, итератор также должен быть константным.

Я полагал, что проблема заключается в const, а не в const таблице.

0 голосов
/ 07 декабря 2011

Я предполагаю, что таблица является константой.

...