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

Ошибка: iterator not decrementable - C++

Восстановить пароль Регистрация
 
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 12:10     Ошибка: iterator not decrementable #1
компилятор ошибок не выдает, а когда программа начинает работать она периодически выдает такое сообщение - iterator not decrementable, не могу понять в чем оштика, потому что иногда она работает нормально
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2012, 12:10     Ошибка: iterator not decrementable
Посмотрите здесь:

std::sort(iterator, iterator, method) подскажите как исправить C++
C++ string iterator
iterator to count C++
vector iterator not decrementable C++
Ошибка в роботе с контейнером: set iterator not incrementable C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
10.12.2012, 12:11     Ошибка: iterator not decrementable #2
olya18, ща, телепатов подгоним. Они без кода тебе все расскажут. Оля, башкой думай, как вопрос задаешь.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
10.12.2012, 12:11     Ошибка: iterator not decrementable #3
А можно Код???
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 12:12  [ТС]     Ошибка: iterator not decrementable #4
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
34
//Удаление
    int vremya=400;
    int ud=0;
    for(vector<Samolet*>::iterator i=www.begin();i!=www.end();i++)
    {
        if((*i)->getMaxTime()<vremya)
        {
            ud++;
            Samolet *v=*i;
            i=www.erase(i);
            i--;
            delete v;
        }
    }
    cout<<" _____________________________________________________________________________\n"
        <<"|                                  Удаление                                   |\n"
        <<" _____________________________________________________________________________\n"
        <<"|    Вес     |  Скорость |Координаты |  Максимальное  |Время тех   |Количество|\n"
        <<"|            |           |           |  время полёта  |обслуживания|    мест  |\n"
        <<" _____________________________________________________________________________\n";
    for(int i=0;i<[url]www.size();[/url] ;i++[/url])
    {   
        PassengerPlane *pas_plane;
        if(pas_plane=dynamic_cast<PassengerPlane*>(www[i]))
            pas_plane->print();
        else
            www[i]->print();    
    }
    cout<<"______________________________________________________________________________|\n";
    cout<<"Самолёты с максимальным временем полета меньше 400 минут: "<<ud<<"\n";
    //Очистка
    for(vector<Samolet*>::iterator i=www.begin();i!=www.end();i++)
        delete *i;
    [url]www.clear();[/url]
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
10.12.2012, 12:15     Ошибка: iterator not decrementable #5
А можно НОРМАЛЬНЫЙ и РАБОТАЮЩИЙ код?????

Добавлено через 52 секунды
Можно полностью весь код ???
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 12:16  [ТС]     Ошибка: iterator not decrementable #6
а еще когда я нажимаю пропустить выдается еще одно сообщение - "Standart C++ Libreas Out of range" &&0
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
10.12.2012, 12:16     Ошибка: iterator not decrementable #7
Код пожалуйста.....................
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 12:18  [ТС]     Ошибка: iterator not decrementable #8
Ой, я не тот отправила...
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// lab_6_OOP.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "conio.h"
#include "string.h"
#include "PassengerPlane.h"
#include "Samolet.h"
#include <vector>
#include <time.h>
#include <algorithm>
#include <clocale>
#include <stdlib.h>
#include <iostream>
 
#define N 100
 
using namespace std;
 
bool MyCompare(Samolet *a, Samolet *b)
{
    PassengerPlane *pas_plane1, *pas_plane2;
    if((pas_plane1=dynamic_cast<PassengerPlane*>(a))&&(pas_plane2=dynamic_cast<PassengerPlane*>(b)))
    {
        if((pas_plane1->getSpeed())>=(pas_plane2->getSpeed()))
            return false;
        else
            return true;
    }
    else
        if(!(pas_plane1=dynamic_cast<PassengerPlane*>(a))&&!(pas_plane2=dynamic_cast<PassengerPlane*>(b)))
        {
            if((a->getSpeed()>=(b->getSpeed())))
                return false;
            else
                return true;
        }
        else
        {
            if(!(pas_plane1=dynamic_cast<PassengerPlane*>(a))&&(pas_plane2=dynamic_cast<PassengerPlane*>(b)))
                return true;
            else
                if((pas_plane1=dynamic_cast<PassengerPlane*>(a))&&!(pas_plane2=dynamic_cast<PassengerPlane*>(b)))
                    return false;
        }
    return true;
}
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
int _tmain(int argc, _TCHAR* argv[])
{
    vector<Samolet*> www;
    setlocale (LC_CTYPE,"rus");
    srand(time(NULL));
    int n, r,kol_pas_plane, kol_sam;
    kol_pas_plane = kol_sam = 0;
    n=2+rand()%N;
    cout<<" _____________________________________________________________________________\n"
        <<"|                             Начальные данные:                               |\n"
        <<" _____________________________________________________________________________\n"
        <<"|    Вес     |  Скорость |Координаты |  Максимальное  |Время тех   |Количество|\n"
        <<"|            |           |           |  время полёта  |обслуживания|    мест  |\n"
        <<" _____________________________________________________________________________\n";
    for(int i=0; i<n; i++)
    {
        r=1+rand()%2;
        if(r==1)
        {
            double v = 200 + rand()%360;
            double s = 180 + rand()%720;
            double x = 10 + rand()%90;
            double y = 10 + rand()%90;
            double mt = 60 + rand()%540;
            double tt = 60 + rand()%430;
            Samolet *samolet = new Samolet(v,s,x,y,mt,tt);
            [url]www.push_back(samolet);[/url]
            kol_sam++;
            samolet->print();
        }
        else
        {
            double v = 200 + rand()%360;
            double s = 180 + rand()%720;
            double x = 10 + rand()%90;
            double y = 10 + rand()%90;
            double mt = 60 + rand()%540;
            double tt = 60 + rand()%430;
            int km = 50 + rand()%450;
            PassengerPlane *pas_plane=new PassengerPlane(v,s,x,y,mt,tt,km);
            [url]www.push_back(pas_plane);[/url]
            kol_pas_plane++;
            pas_plane->print();
        }
    }
    cout<<"|_____________________________________________________________________________|\n\n\n";
    //Сортировка
    sort([url]www.begin(),www.end(),MyCompare);[/url]
    cout<<"Частные самолёты: "<<kol_sam
        <<"\nПассажирские самолеты: "<<kol_pas_plane<<"\n";
    cout<<" _____________________________________________________________________________\n"
        <<"|                                Сортировка                                   |\n"
        <<" _____________________________________________________________________________|\n"
        <<"|    Вес     |  Скорость |Координаты |  Максимальное  |Время тех   |Количество|\n"
        <<"|            |           |           |  время полёта  |обслуживания|    мест  |\n"
        <<" _____________________________________________________________________________\n";
    for(int i=0;i<[url]www.size();i++[/url])
    {   
        PassengerPlane *pas_plane;
        if(pas_plane=dynamic_cast<PassengerPlane*>(www[i]))
            pas_plane->print();
        else
            www[i]->print();
    }
    //Удаление
    int vremya=400;
    int ud=0;
    for(vector<Samolet*>::iterator i=www.begin();i!=www.end();i++)
    {
        if((*i)->getMaxTime()<vremya)
        {
            ud++;
            Samolet *v=*i;
            i=www.erase(i);
            i--;
            delete v;
        }
    }
    cout<<" _____________________________________________________________________________\n"
        <<"|                                  Удаление                                   |\n"
        <<" _____________________________________________________________________________\n"
        <<"|    Вес     |  Скорость |Координаты |  Максимальное  |Время тех   |Количество|\n"
        <<"|            |           |           |  время полёта  |обслуживания|    мест  |\n"
        <<" _____________________________________________________________________________\n";
    for(int i=0;i<[url]www.size();i++[/url])
    {   
        PassengerPlane *pas_plane;
        if(pas_plane=dynamic_cast<PassengerPlane*>(www[i]))
            pas_plane->print();
        else
            www[i]->print();    
    }
    cout<<"______________________________________________________________________________|\n";
    cout<<"Самолёты с максимальным временем полета меньше 400 минут: "<<ud<<"\n";
    //Очистка
    for(vector<Samolet*>::iterator i=www.begin();i!=www.end();i++)
        delete *i;
    [url]www.clear();[/url]
    return 0;
}
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
10.12.2012, 12:18     Ошибка: iterator not decrementable #9
Что за <Include.h> ???
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 12:21  [ТС]     Ошибка: iterator not decrementable #10
Вот программа полностью
Вложения
Тип файла: rar prog.rar (1,020.6 Кб, 10 просмотров)
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 12:26  [ТС]     Ошибка: iterator not decrementable #11
Она работает, но не всегда..

Добавлено через 1 минуту
Она работает, но не всегда
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 12:50     Ошибка: iterator not decrementable #12
olya18, а можно само задание? у меня ощущение, что вы его не до конца поняли. Я в коде вижу виртуальные методы. Казалось бы, полиморфизм, но местами идут динамик касты
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 12:52  [ТС]     Ошибка: iterator not decrementable #13
Задание такое-Разработать программу, в которой объекты помещаются и обрабатываются в
объекте - контейнере.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 12:56     Ошибка: iterator not decrementable #14
olya18, А что-то про полиморфизм, виртуальные функции и наследование было в задании?
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 13:23  [ТС]     Ошибка: iterator not decrementable #15
это было в предыдущих лабораторных

Добавлено через 3 минуты
то есть я их кусами пишу, каждый раз как то переделывая, вот сейчас нужно с контейнером

Добавлено через 21 минуту
I.M., так из-за чего она может так работать??
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 13:33     Ошибка: iterator not decrementable #16
olya18, собственно, тема "полиморфизм" явно осталась вами не понята. Иначе в коде не было бы динамик кастов.
Также есть недочеты в работе с вектором. Например методы clear и erase сами вызывают деструкторы объектов. Не надо вызывать их вручную.
Ошибка скорее всего в цикле удаления. Возьмем эти 2 строчки:
C++
1
2
i=www.erase(i);
i--;
и предположим, что i - это первый элемент вектора
erase удалит первый элемент вектора и вернет итератор на новый первый элемент. А затем вы патетесь его уменьшить на единицу. Но он уже первый. Уменьшать некуда.
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 13:35  [ТС]     Ошибка: iterator not decrementable #17
то есть не нужно i уменьшать?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 13:37     Ошибка: iterator not decrementable #18
olya18, не совсем.
C++
1
2
3
4
5
6
7
8
9
    for(vector<Samolet*>::iterator i=www.begin();i!=www.end();)
    {
        if((*i)->getMaxTime()<vremya)
        {
            ud++;
            i=www.erase(i);
        }
                      else i++;
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 13:40     Ошибка: iterator not decrementable
Еще ссылки по теме:

C++ Ошибка при запуске программы "vector iterator not incrementable"
C++ Iterator
C++ Ошибка list iterator not dereferencable

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

Или воспользуйтесь поиском по форуму:
olya18
 Аватар для olya18
4 / 4 / 0
Регистрация: 29.10.2012
Сообщений: 21
10.12.2012, 13:40  [ТС]     Ошибка: iterator not decrementable #19
I.M., спасибо!!!!!!
Yandex
Объявления
10.12.2012, 13:40     Ошибка: iterator not decrementable
Ответ Создать тему
Опции темы

Текущее время: 03:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru