Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
#1

Map/set iterator not dereferencable - C++

11.04.2014, 19:08. Просмотров 849. Ответов 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. Возможно, я недопонимаю как работают итераторы. Как мне быть?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2014, 19:08     Map/set iterator not dereferencable
Посмотрите здесь:

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

map/set iterator not dereferencable - C++
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) - C++
Есть функция,в которой происходит поиск в map по ключу. Если по данному ключу нет значения, то необходимо провести интерполяцию двух...

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

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

Ошибка "iterator not dereferencable" при использовании ссылки - C++
Всем привет. Без ссылки все работает, с ссылкой ошибка: &quot;iterator not dereferencable&quot;. С ссылкой: void func(vector&lt;string&gt;&amp; arr) ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
11.04.2014, 20:03     Map/set iterator not dereferencable #2
ssAprillss, это сообщение, я так понимаю, в рантайме уже выдается?
Тут суть в том, что std::map возвращает итератор end() в случае, если элемент не найден. А этот итератор нельзя разыменовывать.
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
11.04.2014, 20:09  [ТС]     Map/set iterator not dereferencable #3
Да, уже в ран тайме, а как это решить?
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
11.04.2014, 20:12     Map/set iterator not dereferencable #4
ssAprillss, код писать корректный, студия эту проверку сделала и вывела сообщение. Но вообще не обязана была и программа бы просто упала.
Короче результат find() нужно сравнивать с end() и если только он не равен end() его можно разыменовывать.
ssAprillss
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 7
11.04.2014, 20:47  [ТС]     Map/set iterator not dereferencable #5
Ну, я попробую, но я так и не понял, в чем моя ошибка была.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2014, 21:22     Map/set iterator not dereferencable
Еще ссылки по теме:

Map iterator - C++
map&lt;string, int&gt; m; m.insert(pair&lt;string, int&gt;(&quot;a&quot;, 1)); map&lt;string, int&gt;::iterator it = m.begin(); cout &lt;&lt; *it; ...

Синхронизация map и vector. Iterator not incrementable - C++
День добрый. Надо синхронизровать vector и map, чтобы в них были только одинаковые элементы. Вот мой код, который выбрасывает ошибку....

Ошибка в роботе с контейнером: set iterator not incrementable - C++
Задание:Дано предложение.Какие большие и маленькие буквы с этих 'k','p','s','t','f','h','c' не содержатся в предложении. Обязательным...

Map iterator обращение к предыдущему или последующему элементу - C++
for(map&lt;string,int&gt;::iterator i = m.begin();i!=m.end();i++) if( (i+1) == m.end() ) cout &lt;&lt; &quot;End&quot;; Как сделать что-то...

Tree, set, map etc. - C++
Решил посмотреть реализацию стандартного мап/сет и вспомогательного класса _Tree (кстати, он только в MSVS или есть везде, но по разному...

Expression:map/set incompatible - C++
Подскажите пожалуйста почему происходит ошибка в этом коде: set&lt;int&gt; S; vector&lt;set&lt;int&gt;::iterator&gt; v1; ...


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

Или воспользуйтесь поиском по форуму:
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
11.04.2014, 21:22     Map/set iterator not dereferencable #6
ssAprillss, взгляни на пример.
В документации написано, что find возвращает end(), если элемент не найден. Это признак того, что он не найден. В чем смысл разыменования end(), если он никуда не указывает? В контейнерах стандартной библиотеки, это условное обозначение итератора следующего за последним элементом, и служит он только для обозначения конца последовательности или конца другой структуры (в случае map - это дерево). Он не предназначен для разыменования, а только лишь для сравнения с другими итераторами.
Yandex
Объявления
11.04.2014, 21:22     Map/set iterator not dereferencable
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru