Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63

Реализация стека наследованием реализации контейнера

17.01.2015, 14:46. Показов 2715. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется иерархия классов, во главе которой класс-интерфейс. Нужно создать стек для хранения указателей на интерфейс для полиморфной обработки.

Для создания стека нужно создать обобщённый контейнерный класс, и от него закрытым наследованием создать класс-шаблон-стек.

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
class container
{
public:
        ~container(){delete[] data;}
 
    void push(void* d, int k)
    {data[k] = d;}
 
    void* getIt(int k)
    {return data[k];}
 
    void pop(int k)
    {delete data[k];}
 
    void clear(int k){
    for(int i=0; i<k ; i++)
    if(data[k]!=0)
    delete data[k];
    }
 
    void* operator[] (int i)
    {return data[i];}
 
private:
    void* data[4];
};
 
template<class T> class stack:private container
{
public:
    stack(){sz=0;}
 
    void push(T d){
        container::push(d, sz);
        sz++;
    }
 
    T* top(){
        return static_cast<T*>(container::getIt(sz-1));
    }
 
    void pop(){container::pop(sz-1);sz--;}
 
    bool empty(){return (sz==0);}
 
    int size(){return sz;}
 
    void clear(){container::clear(sz);}
 
private:
int sz;
};
Вот моя попытка сделать стек. Функция push() кажется работает, а при попытке использовать функцию top() возникает ошибка компиляции.

E2288 Pointer to structure required on left side of -> or ->*

Кусок кода, где возникает ошибка
Кликните здесь для просмотра всего текста
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
stack<Interface*> s1;
vector<Vocal> v1;
vector<Instr> v2;
vector<Dict> v3;
vector<Stud> v4;
...
//заполнение векторов
...
if ( i < v1.size() ) s.push( &v1[i] );
        if ( i < v2.size() ) s.push( &v2[i] );
        if ( i < v3.size() ) s.push( &v3[i] );
        if ( i < v4.size() ) s.push( &v4[i] );
        if (s.empty()) break;
        for ( ;!s.empty();s.pop())
        {
            ::DB<<s.top()->GetInform(-2)<<'\n'; //ошибка вот здесь.
            ::DB<<s.top()->GetInform(0)<<'\n';
            ::DB<<s.top()->GetInform(1)<<'\n';
            ::DB<<s.top()->GetInform(2)<<'\n';
            ::DB<<s.top()->GetInform(3)<<'\n';
            ::DB<<s.top()->GetInform(4)<<'\n';
            ::DB<<s.top()->GetInform(5)<<'\n';
            ::DB<<s.top()->GetInform(6)<<'\n';
            int c=StrToInt(s.top()->GetInform(-2));
...


Функция GetInform() - возвращает char*, является чисто виртуальной в классе-интерфейсе.
Ошибка где-то в реализации стека или контейнера.
Помогите, пожалуйста, найти её.

Добавлено через 27 минут
Ах да, Vocal, Instr, Dict и Stud - наследники Interface
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.01.2015, 14:46
Ответы с готовыми решениями:

вопрос по реализации ассоциативного контейнера
здравствуйте. есть задание по курсовой: Реализовать класс ассоциативного контейнера, хранящий пары элементов «ключ-значение». Ключи...

Реализация стека целых чисел. Процедура добавления нового элемента, удаление, вывод стека
Попросили написать программку, но, паскаль очень давно не практикую, поэтому прошу тут: Надо написать программу реализации стека целых...

Ошибка в реализации стека
Доброго дня, господа форумчане. Стек я реализовал таким вот образом: struct stack { int* arr; int cur; int size; }; ...

22
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
21.01.2015, 14:31  [ТС]
Студворк — интернет-сервис помощи студентам
aLarman, компилит, но теперь не запускает вообще. Exception class $C0000005: access violation : read of address
0
655 / 576 / 164
Регистрация: 13.12.2012
Сообщений: 2,126
21.01.2015, 14:40
Лучший ответ Сообщение было отмечено unit37 как решение

Решение

а в каком месте это происходит не понятно?
1
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
21.01.2015, 14:45  [ТС]
Спасибо всем, заработало без функции pop()
Не знал, как заставить выкинуть объект из стека, решил, что сойдет оставить void pop(){sz--;} в стеке. А вектор обойдется
Просто не изменяя самого контейнера. А туда просто поверх перезаписывать
Конечно, delete был неуместен, ведь память и вправду нигде не выделял.

Отдельное спасибо за cImage, так бы и потерял
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2015, 14:45

Ошибка при реализации стека
Здравствуйте, помогите пожалуйста разобраться в ошибке.Пишу класс, в нём есть динамический символьный массив, вызываю функцию void без...

Ошибка при реализации стека
Здравствуйте! Делал модуль стека, еще неделю назад работал, вчера так и не смог найти ошибку..( unit Unit_Stack; interface ...

Определить типы данных и подпрограммы для реализации контейнера — полный дек связной памяти
добрый день! сделайте пожалуйста такую программу. определить типы данных и подпрограммы для реализации контейнера-полный дек связной...

Реализация контейнера unordered_map
Привет. Не могу найти реализацию этого контейнера. Помогите ссылкой или кодом.

Реализация контейнера в ООП
Здравствуйте, имеется такая задача: Нужна программа, в которую нужно забить информацию о файлам (Имя и размер), а эти файлы в свою очередь,...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости. Решение: Создан документ со следующими. . .
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово. Решение: Создан документ с единственным. . .
Сумма и количество положительных элементов в чётных строках массива
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить сумму и количество положительных элементов массива, расположенных в четных строках. Решение: Создан документ с. . .
Поиск произведения положительных чётных чисел в последовательности
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Дана произвольная последовательность целых чисел. Найти произведение положительных четных чисел данной последовательности. . . .
Обработка трёх чисел: утроение и возведение в степень
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Даны три действительных числа. Утроить те из них, значения которых неотрицательны, и возвести в четвертую степень отрицательные. . . .
Расчёт стоимости яблок по весу
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Написать программу вычисления стоимости некоторого количества (по весу) яблок. Решение: Создан документ, с табличной частью. . .
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru