![]() |
|
Модераторы: bsa |
![]()
|
|
| v_123 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
Подскажите, пожалуйста, почему в следующем коде i=find(in.begin(),in.end(),buf[0]); работает
а при попытке использовать вместо in.begin() итератор, в данном случае string::const_iterator SI i; компилятор выводит ошибку? Как ее устранить?
Ошибка: d:\Program Files\Microsoft Visual Studio\MyProjects\1\4_11\5_12(2).cpp(16) : error C2782: '_II __cdecl std::find(_II,_II,const _Ty &)' : template parameter '_II' is ambiguous could be 'char *' or 'const char *' аналогично при использовании sort, count. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| v_123 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
При использовании любого из них:
виндоус выдает ошибку: 4_11.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. и т.д |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Это уже не в const_iterator дело, а в неправильном его использовании.
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| v_123 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
и еще, пример похож на приведенный в Страуструпе п.3.8.1 и там не написано о подобных проблемах
у него:
Добавлено через 3 минуты и 17 секунд
Вы не объясните более подробно в чем тут дело? |
||||
|
|||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
По приведённому кусочку кода сказать сложно. Скорее всего причина AV(access violation), т.е. обращение к области памяти, к которой ты обращаться права не имеешь. Изначальная проблема была связана с тем, что компилятор не мог вывести один из шаблонных параметров ф-ции и, с "ошибкой windows" это никак не связано. Думаю что, если перепечатать пример букву в букву, то "ошибки windows" не будет - потому там "о подобных проблемах" и не написано. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: нет Всего: 17 |
хм... риальне не работе))
гыгыгы. ну begin() возвращает просто string::iterator. поэтому с .begin(), .end() усе работает. Даже не знаю, как понимать такой прикол. Это сообщение отредактировал(а) comcon1 - 10.3.2008, 11:23 |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| comcon1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: нет Всего: 17 |
содержание STL-книги. теперь все ясно.)))
вот такая херь работает уже норм. но это, простите, извращенство!! Это сообщение отредактировал(а) comcon1 - 10.3.2008, 11:43 |
||||
|
|||||
| v_123 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.3.2008 Репутация: нет Всего: нет |
Спасибо за ответы. Решение проблемы в принципе найдено. Вариант comcon1 работает.
Тот который в книге в исходном варианте все таки не заработал, но с i = std::find< SI >(i+1, s.end(), c); ошибок нет.
Ошибка: d:\Program Files\Microsoft Visual Studio\MyProjects\1\4_11\5_12(2).cpp(16) : error C2782: '_II __cdecl std::find(_II,_II,const _Ty &)' : template parameter '_II' is ambiguous could be 'char *' or 'const char *' |
|||
|
||||
| archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Хотел бы я увидеть аргументацию Мейрса(??) отностиельно данного совета(если он [совет], конечно, правильно перепечатан).
Кто ж виноват, что Вы извращенец... Действительно, если ничего в коде не менять, то ошибки(изначальные) в нём по прежнему останутся. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
может лучше использовать не std::find, а std::string::find?
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
||||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Это не аргумент. Когда мне нужен поиск по коллекции(non modifying algorithm), я могу свободно пользоваться const_iterator. Имею право так сказать(а следуя хорошему тону именно должен - не зря в С++09 вводят метод cbegin созвращающий const_iterator). Когда же мне нужно отсортировать коллекцию, я использую sort(modifying algorithm), который просто не примет const_iterator. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: нет Всего: 17 |
Я не извращенец, я риальне не юзаю const_iterator в реальном коде. Я воспользовался советом Мейрса, который дословно скопипастил с какого-то сайта. Может подскажете менее извращенный способ перевода const_iterator в iterator. Этот пример п.к.м. работает... |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |