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

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

17.01.2015, 14:46. Показов 2779. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru