Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Illegal structure operation


Автор: I_Am_Rock 1.7.2011, 20:38
Всем добрый день.

Подскажите, пожалуйста.
Написал такую программу в Builder 6, где все прекрасно работает.
Но нужно (увы), чтобы программа работала и в Builder 5.

А она показывает ошибки.
Сначала ругалась на ' it-> ' - я заменил на ' (*it). ' и теперь с этим нормально

Но появились другие ошибки - смотрите скриншот. http://tlt-images1.narod.ru/img/4e0e03a81d43f.jpg

Что делать - не пойму.  smile 

Код

#include <fstream>
#include <stdlib>
#include <stdio>
#include <algorithm>
#include <list>

// пространство имен std
using namespace std;

// стуктура для хранения данных автобуса
struct autobus
{
        int num_auto;           // номер автобуса
        char fio[30];           // ФИО
        int num_route;          // номер маршрута
};

// функция для выезда и въезда автобуса
// два аргумента: списки - из какого и куда
// список (list) с шаблонным типом - структорой автобуса
void autoMove(list<autobus>& a_list, list<autobus>& b_list)
{
        int i;
        list<autobus>::iterator it;                     // итератор списка
        printf("Vvedite nomer avtobusa: ");
        scanf("%d", &i);                                // вводим номер автобуса
        // циклом проходим по списку, инициализируя итератор it первым элементом
        for (it = a_list.begin(); it != a_list.end(); it++)
                if ((*it).num_auto == i) break;   // если находим номер, выходим из цикла
        // если не дошли до конца (т.е. нашли номер)...
        if (it != a_list.end())
                b_list.splice (b_list.end(), a_list, it); // перемещаем
        // ...иначе
        else printf("Etogo avtobusa v etom spiske net\n");
}

// функция для отображения списка с автобусами
// аргумент - какой именно список (в парке или в пути)
void autoList(list<autobus>& a_list)
{
        list<autobus>::iterator it;     // итератор
        // если рамер списка не равен 0 (т.е. есть элементы)...
        if (a_list.size() != 0)
                // то проходим циклом с итератором it
                for (it = a_list.begin(); it != a_list.end(); it++)
                        // выводим результаты
                        printf("%d\t%s\t%d\n", (*it).num_auto, (*it).fio, (*it).num_route);
        // ...иначе
        else printf("Spisok pust!\n");
}


// главная программа
int main(int argc, char* argv[])
{
        int r, i;                       // вспомогательные переменные
        list<autobus> in_park;          // список автобусов в парке
        list<autobus> in_route;         // список автобусов в пути
        autobus buf;

        printf("Vibor tipa vvoda dannyh:\n1) iz faila\n2) s pomosh'u klaviatury\n\n");
        scanf("%d", &r);

        if (r == 1) {                           // если 1, то из файла...
        
                ifstream in("auto.txt");
                // заполняем список автобусами
                // пока не достигнем конца файла
                while ( !in.eof() ) {
                        in >> buf.num_auto;
                        in >> buf.fio;
                        in >> buf.num_route;
                        in_park.push_back(buf);
                }
                system("CLS");
                printf("Dannye zagruzheny\n");
                system("PAUSE");

        } else if (r == 2) {                    // ...если 2, то с клавиатуры...
        
                system("CLS");
                printf("Vvod kolichestva voditelei: ");
                // узнаем сколько автобусов пользователь введет
                scanf("%d", &i);

                // в цикле заполняем список автобусов
                for (; i > 0; --i)
                {
                        printf("Nomer avtobusa: ");
                        scanf("%d", &buf.num_auto);
                        printf("FIO voditely: ");
                        scanf("%s", &buf.fio);
                        printf("Nomer marshruta: ");
                        scanf("%d", &buf.num_route);
                        in_park.push_back(buf);
                }

                printf("\nDannye zagruzheny\n");
                system("PAUSE");

        } else return 0;                        // ...иначе выходим


        // цикл с постусловием
        do {
                // очищаем экран
                // и выводим меню
                system("CLS");
                printf("Menu:\n1) Avtobus uehal\n2) Avtobus priehal\n");
                printf("3) Spisok, kto v parke\n4) Spisok, kto uehal\n0) Vihod\n\n");
                scanf("%d", &r);
                system("CLS");
                // что ввел пользователь
                switch (r)
                {
                        case 1:
                        printf("1) Avtobus uehal\n\n");
                        // autoMove - из парка в путь
                        autoMove(in_park, in_route);
                        break;

                        case 2:
                        printf("2) Avtobus priehal\n\n");
                        // autoMove - в парк
                        autoMove(in_route, in_park);
                        break;

                        case 3:
                        printf("3) Spisok, kto v parke\n\n");
                        // autoList - список, кто в парке
                        autoList(in_park);
                        break;

                        case 4:
                        printf("4) Spisok, kto uehal\n\n");
                        // autoList - список, кто уехал
                        autoList(in_route);
                        break;
                }
                system("PAUSE");

        } while (r != 0);       // условие выхода - нажатие 0

        return 0;
}


Автор: borisbn 4.7.2011, 11:17
I_Am_Rock, открой этот list.h (где-то в каталоге дебилдера) и посмотри, что там на 676-й строке.
Возможно list требует, чтобы в твоей структуре был описан оператор <.

и ещё, ты говоришь
Цитата(I_Am_Rock @  1.7.2011,  20:38 Найти цитируемый пост)
Написал такую программу в Builder 6, где все прекрасно работает.Но нужно (увы), чтобы программа работала и в Builder 5.

а на скрине не Builder, а Borland C++. Чему верить ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)