![]() |
|
|
![]()
|
|
| zhekha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::_Tree<_Traits>::const_iterator' (or there is no acceptable conversion) Как с таким можно бороться? Может подобный перебор элементов мапа следует делать как-то иначе? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 2 Всего: 154 |
У тебя константный итератор, его нельзя изменять, а оператор = именно это и должен делать
замени его на обычный chanels у тебя-же не константа |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 2 Всего: 17 |
бороться с этим надо так:
bool getFirst(string&a, string&b) const { bool getNext(string&a, string&b) const { вы ж меняете состояние объекта, зачем там const Добавлено @ 10:10 или еще так можно бороться, наверно это будет правильнее в данном случае... хотя хз...
Это сообщение отредактировал(а) korian - 26.3.2008, 10:12 |
|||
|
||||
| zhekha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
А решение оказалось как всегда очень простым...
Спасибо, korian, верно подметил - забыл убрать const... Только не понял зачем const_cast: const_iterator - итератор, который бегает по неизменяющейся последовательности, как я понимаю, а не неизменяемый... Это сообщение отредактировал(а) zhekha - 26.3.2008, 10:39 |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 2 Всего: 17 |
можно еще так бороться, этот вариант имху лучше второго.
но, имху, самый лучший - первый вариант, т.к. состояние объекта все-таки меняется
Добавлено через 59 секунд убрать константность в функции константного объекта |
|||
|
||||
| zhekha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
На самом деле последний вариант - наиболее подходящий, т.к. функции - по функциолнальности являются get-методами и данные менять не должны, а, вот итератор могут...
|
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
Вообще где-то я читал - итератор делать членом класса - это плохой тон программирования
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| zhekha |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
Почему? |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 2 Всего: 17 |
если рассматривать объект класса MyClass, как объект, который является map-ом, только с другим интерфейсом - тогда имху правильный 3-й вариант. а если рассматривать его как объект, который предоставляет доступ к map, тогда имху первый вариант лучше. хотя лучше переархитектить класс вообще и не хранить итераторы Добавлено через 5 минут и 28 секунд потому что такой объект выполняет двойную роль. он является map'ом и iterator'ом одновременно. |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
Где-то в своей проге ты можешь не уследить за изменениями итератора.
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |