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

Структура в стеке - C++

Восстановить пароль Регистрация
 
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
28.04.2013, 08:31     Структура в стеке #1
Я наверное уже всех задолбал со своим стеком, но всё же мне еще нужна помощь))
Код, который ниже должен запрашивать у пользователя ввод структуры, которая после помещается в стеке. Так же программа может этот стек выводить и для сохранения информации я сохраняю этот стек в другом стеке . Но при компиляции выдает ошибку в выводе: 'class std::stack<Football>' has no member named 'fio'| и так для каждого поля.Не могу что не так =( Вот код:
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
101
#include <iostream>
#include <string.h>
#include <fstream>
#include <stack>
using namespace std;
 
void Add();
void ShowAll();
void menu(char);
 
struct Football{
    string fio,legioner;
    int age,golls;
    double time,plata;
};
Football op;
stack<Football> Stek,Temp;
 
int main()
{
string num;
 
     while(num[0]!='0') // Бесконечный цикл
  {         /* вывод меню */
    cout<<"1 - Read from file"<<endl;
    cout<<"2 - Add element"<<endl;
    cout<<"3 - Delete element"<<endl;
    cout<<"4 - Show 1 element"<<endl;
    cout<<"5 - Show all elements"<<endl;
    cout<<"6 - Sorting"<<endl;
    cout<<"7 - Individual task"<<endl;
    cout<<"8 - Write to file"<<endl;
    cout<<"0 - Exit"<<endl;
    cout<<"Input number of menu>"<<endl;// Вывод приглашения на выбор элемента меню};
    getline(cin,num); // Ввод строки
    if(num.size()>1) cout<<"Comand not found, retype!"<<endl;// Проверка размера строки
    else menu(num[0]);// Функция выполнения поля меню
  }
  return 0;
}
 
void menu(char a)
{
    switch(a)
    {
     case '0': cout<<"Exit"<<endl;
        break;
  //   case '1': Read();
        break;
     case '2': Add();
        break;
 //    case '3': Del();
        break;
  //   case '4': ShowOne();
        break;
     case '5': ShowAll();
        break;
 //    case '6': Sorting();
        break;
 //    case '7': IndTask();
        break;
  //   case '8': Write();
        break;
      default:
        cout<<"Comand not found, retype!"<<endl;
        break;
    }
}
//--------------------------------------Функция добавления элемента в стек-------------------------------------------
void Add()
{               //вводим данные
        cout << "Vvedite familiu imya otchestvo: ";
        cin.ignore();
        getline(cin,op.fio);
        cout << "Vozrast: ";
        cin >> op.age;
        cout << "Kollichestvo golov: ";
        cin >> op.golls;
        cout << "Vremya: ";
        cin >> op.time;
        cout << "Yavlyaentsya legionerom? (yes/no): ";
        cin.ignore();
        getline(cin,op.legioner);
        cout << "Zar_plata: ";
        cin >> op.plata;
        cout << endl;
        Stek.push(op);            //добавление элемента в стек
}
//------------------------------------Вывод стека на экран и сохранение таблицы во временном стеке---------------------------------
void ShowAll()
{
        Temp=Stek; //Сохраняем таблицу во временном стеке
        Stek.top();//выводим верхний
        cout << "\nVvedite familiu imya otchestvo" << Stek.fio;
        cout << "\nVozrast" << Stek.age;
        cout << "\nKollichestvo golov" << Stek.golls;
        cout << "\nVremya" << Stek.time;
        cout << "\nYavlyaentsya legionerom? (yes/no)" << Stek.legioner;
        cout << "\nZar_plata" << Stek.plata << '\n';
        Stek.pop(); //удаляем верхний
    }
З.Ы. Вопросик не по теме, но может кто-то наглядно объяснить как динамически выделять память под объекты структуры?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 08:31     Структура в стеке
Посмотрите здесь:

C++ Вопрос о стеке
Выполнение кода в стеке C++
Задача на MINIMUM в стеке C++
Динамические массивы на стеке C++
Структура в стеке. Не работает ф-ия renumber C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
28.04.2013, 09:34     Структура в стеке #2
Я могу, конечно, сделать, чтобы твоя программа скомпилилась, но надо сперва понять чего ты хочешь. А это трудно.

Тебе компилятор чётко говорит: класс Football не имеет имеет поля fio, чё непонятного?

Вот у тебя стек:
C++
1
stack<Football> Stek
Вот ты в него запихал элементы типа Football, сейчас он просто сумма таких элементов:
Stek= Football_0+ Football_1+ Football_2 +Football_3

Какого рожна ты пишешь:
C++
1
Stek.fio
?

Stek имеет отношение к fio как свинья к апельсинам. Ты просто отсебятину лепишь. Кто тебя так учил писать? В каком учебнике? Я тебе сказал, какую книгу скачать для изучения STL, ты её скачал? Нет. А она простая!

А главное править-то что? Непонятно что ты хочешь этим сказать, а догадываться неохота.
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
28.04.2013, 10:46  [ТС]     Структура в стеке #3
Эм... видимо кодить ночью не очень) я понял свою ущербность, но тогда у меня вопрос.Вот с с помощью stek.top() получил вернхий элемент стека, которым является структура, в которой есть поля.Как мне правильно обратиться к полям этой стркутуры? Вот моя функция вывода, которая в моем понимании должна выводить на экран стек:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ShowAll()
{
        Temp=Stek; //Сохраняем таблицу во временном стеке
    while(!Stek.empty())
        {
        Stek.top();//выводим верхний
        cout << "\nVvedite familiu imya otchestvo " << op.fio;
        cout << "\nVozrast " << op.age;
        cout << "\nKollichestvo golov " << op.golls;
        cout << "\nVremya " << op.time;
        cout << "\nYavlyaentsya legionerom? (yes/no)" << op.legioner;
        cout << "\nZar_plata " << op.plata << '\n';
        Stek.pop();} //удаляем верхний
    Stek=Temp;
    }
Но если, к примеру, ввести структуру 2 раза, то при выводе 2 раза выдает верхний элемент(т.е. тот, который был записан последним). Почему так, я же pop() написал?

З.Ы. Вот функция ввода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cout << "Vvedite familiu imya otchestvo: ";
        cin.ignore();
        getline(cin,op.fio);
        cout << "Vozrast: ";
        cin >> op.age;
        cout << "Kollichestvo golov: ";
        cin >> op.golls;
        cout << "Vremya: ";
        cin >> op.time;
        cout << "Yavlyaentsya legionerom? (yes/no): ";
        cin.ignore();
        getline(cin,op.legioner);
        cout << "Zar_plata: ";
        cin >> op.plata;
        cout << endl;
        Stek.push(op);
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
28.04.2013, 15:14     Структура в стеке #4
А ты можешь ShowAll() и вывод запихать в одну программу и дать сюда? Просто ввод и вывод, ничего лишнего. И если будет неправильно вводить-выводить, дать сюда (ставлю 99 к одному, что ты с этой задачей не справишься).

Ну и так между прочим, три вопроса:
Stek.top();- это с какой целью здесь?

op- это что такое?

С этим ознакамливался?
Создание стека структур
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
29.04.2013, 00:21  [ТС]     Структура в стеке #5
Спасибо, я вроде разобрался. Stek.top() в коде уже уничтожено, а op - это объект структуры, который пихается в стек.В любом случае большое спасибо)
Yandex
Объявления
29.04.2013, 00:21     Структура в стеке
Ответ Создать тему
Опции темы

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