Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7

Map/set iterator not dereferencable

11.04.2014, 19:08. Показов 3957. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два класса, первый:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class AnimationManager
{
    public:
        String currentAim;
        std::map<String, Animation> animList;
    
 
        AnimationManager()
        {};
        
            void create(String name, Texture &t, int x, int y, int w, int h, int count, float Speed, int step)
            {
                
                animList.emplace(name, Animation(t,x,y,w,h,count,Speed,step));
                currentAim=name;
                    
 
            };
 
 
 
            void draw (RenderWindow &window, int x=0, int y=0)
            {
                 animList.find(currentAim)->second.sprite.setPosition(x,y);
                window.draw( animList.find(currentAim)->second.sprite);
            }
 
            void set(String name) {currentAim = name;}
            void flip (bool b) {animList.find(currentAim)->second.flip = b;}
            void tick (float time) {animList.find(currentAim)->second.tick(time);}
            void pause () {animList.find(currentAim)->second.isPlaying=false;}
            void play () {animList.find(currentAim)->second.isPlaying=true;}
};

И второй, в котором есть следующая функция:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 void update(float time)
 { 
  
  if (STATE==stay) anim.set("stay");
  if (STATE==walk) anim.set("walk");
  if (STATE==jump) anim.set("jump");
  if (STATE==duck) anim.set("duck");
 [B] if (STATE==climb) {anim.set("climb"); anim.pause(); if (dy!=0) anim.play(); if (!onLadder) STATE=stay;} [/B]
  if (shoot) { anim.set("shoot"); 
  if (STATE==walk) anim.set("shootandwalk");}
[B]  if (dir) anim.flip(dir);[/B]
  
  
  x += dx * time; 
  
  dy+=0.0005*time;
  
  y += dy*time;  
 
 [B] anim.tick(time);[/B]

Если я убираю строчки, выделенные жирным шрифтом, то ошибка пропадает, если же оставляю, то выводится следующие сообщение:map/set iterator not dereferencable. Возможно, я недопонимаю как работают итераторы. Как мне быть?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2014, 19:08
Ответы с готовыми решениями:

Map/set!( iterator not dereferencable)
Есть функция,в которой происходит поиск в map по ключу. Если по данному ключу нет значения, то необходимо провести интерполяцию двух...

map/set iterator not dereferencable
map&lt;string,int&gt; optimized(map&lt;string,int&gt;&amp;dict){ map&lt;string,int&gt;::iterator i=dict.begin(); map&lt;string,int&gt;::iterator j=dict.begin(); ...

Map/set iterator not dereferencable
Всем доброго времени суток. Суть задания в том, чтобы удалить повторы комбинаций чисел в multimap'e. Проблема в том, что появляется данная...

5
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
11.04.2014, 20:03
ssAprillss, это сообщение, я так понимаю, в рантайме уже выдается?
Тут суть в том, что std::map возвращает итератор end() в случае, если элемент не найден. А этот итератор нельзя разыменовывать.
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
11.04.2014, 20:09  [ТС]
Да, уже в ран тайме, а как это решить?
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
11.04.2014, 20:12
ssAprillss, код писать корректный, студия эту проверку сделала и вывела сообщение. Но вообще не обязана была и программа бы просто упала.
Короче результат find() нужно сравнивать с end() и если только он не равен end() его можно разыменовывать.
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
11.04.2014, 20:47  [ТС]
Ну, я попробую, но я так и не понял, в чем моя ошибка была.
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
11.04.2014, 21:22
ssAprillss, взгляни на пример.
В документации написано, что find возвращает end(), если элемент не найден. Это признак того, что он не найден. В чем смысл разыменования end(), если он никуда не указывает? В контейнерах стандартной библиотеки, это условное обозначение итератора следующего за последним элементом, и служит он только для обозначения конца последовательности или конца другой структуры (в случае map - это дерево). Он не предназначен для разыменования, а только лишь для сравнения с другими итераторами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.04.2014, 21:22
Помогаю со студенческими работами здесь

Ошибка Expression: map/set iterator not dereferencable
Здравствуйте! Мне нужно вывести контейнер map в обратном порядке. Делаю следующим образом: for (multimap&lt;double, int&gt;::iterator i...

List iterator not dereferencable
list iterator not dereferencable -выбивает такую ошибку что делать? код не дописан знаю проблема в функции удаления ...

List iterator not dereferencable
Добрый день. Вот в таком маленьком коде возникает ошибка &quot;list iterator not dereferencable&quot;. Помогите пожалуйста найти решение данной...

deque iterator not dereferencable
итак программа должна считывать из файла данные об автобусных маршрутах (имя водителя, номер маршрута и т.д.). После этого сортировать...

Ошибка list iterator not dereferencable
Ошибка при использовании итератора. Хэлп, сос :cry: void client_login(list&lt;client&gt; client_list) { char name, login, password,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru