|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|||||||||||
Реализация стека наследованием реализации контейнера17.01.2015, 14:46. Показов 2469. Ответов 22
Метки нет (Все метки)
Имеется иерархия классов, во главе которой класс-интерфейс. Нужно создать стек для хранения указателей на интерфейс для полиморфной обработки.
Для создания стека нужно создать обобщённый контейнерный класс, и от него закрытым наследованием создать класс-шаблон-стек.
E2288 Pointer to structure required on left side of -> or ->* Кусок кода, где возникает ошибка Кликните здесь для просмотра всего текста
Функция GetInform() - возвращает char*, является чисто виртуальной в классе-интерфейсе. Ошибка где-то в реализации стека или контейнера. Помогите, пожалуйста, найти её. Добавлено через 27 минут Ах да, Vocal, Instr, Dict и Stud - наследники Interface
0
|
|||||||||||
| 17.01.2015, 14:46 | |
|
Ответы с готовыми решениями:
22
вопрос по реализации ассоциативного контейнера Реализация стека целых чисел. Процедура добавления нового элемента, удаление, вывод стека Ошибка в реализации стека |
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|
| 19.01.2015, 14:48 [ТС] | |
|
Друзья, посмотрите, пожалуйста. Так ведь и не разобрался
0
|
|
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
| 19.01.2015, 16:40 | |
|
у Вас T это Interface*
T* top() Cудя по всему пытаетесь вернуть interface** вот и ошибка
1
|
|
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
||||||||||||||||
| 19.01.2015, 21:28 [ТС] | ||||||||||||||||
|
aLarman, исправил. Теперь программа собирается.
Появилась другая, извечная проблема. При попытке воспользоваться стеком получаю Access violation at address 005793C1 in module... Write of address efe5f0ca Причем собрано по всем законам Компиляция программы под С++ Builder, чтобы работала на других компьютерах. И тем не менее. При замене своего stack.cpp на stack из STL все работает. Но по заданию, увы, надо собственную реализацию. Вот исправленный стек.
Кликните здесь для просмотра всего текста
0
|
||||||||||||||||
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|||
| 20.01.2015, 10:04 | |||
|
Добавлено через 54 секунды покажите реализацию хотя бы одного наследника Interface
1
|
|||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
||||||
| 20.01.2015, 23:17 [ТС] | ||||||
|
Простите, что двумя сообщениями. Не влезает.
Вот определение классов: Кликните здесь для просмотра всего текста
0
|
||||||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
||||||
| 20.01.2015, 23:18 [ТС] | ||||||
|
Кликните здесь для просмотра всего текста
0
|
||||||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|
| 20.01.2015, 23:20 [ТС] | |
|
aLarman, и да, а как нужно, по ссылочке передать?
0
|
|
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
| 20.01.2015, 23:32 | ||||||
1
|
||||||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|
| 20.01.2015, 23:41 [ТС] | |
|
DU2, спасибо, но ошибка все ещё та же самая.
Дело в том, что если заменить мой стек на stl-ский, то все работает корректно. А с моим стеком все же что-то не так.
0
|
|
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 20.01.2015, 23:53 | |
|
ваш стек - это какая-то хрень. в целом а не в деталях исходя из описания.
вот явный косяк в деталях: void pop(int k) {delete data[k];} вы в стек засунули какие-то указатели. владение на объекты, на которые эти указатели в стек не передавались. может вы так хотели, но этого не произошло. объектами по прежнему владеют вектора. а у вас там после заполнения стека идет pop. если бы pop корректно удалял объекты, у вас все равно были бы проблемы. так pop еще и не корректно удаляет. delete вызывается для void*, а должен для базы вызываться. а если вызвать для базы - то он уже не будет обобщенным нешаблонным. а если он будет вызывать delete для правильного типа объекта, то тут возникает другая трабла: у вас указатель из вектора, и не факт что вектор вызывал обычный new для создания объекта. скорее всего там placement new. в общем все с вашим стеком достаточно плохо. и при той формулировки задания, которая в самом первом посте врятли получится сделать что-то хорошее.
0
|
|
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|
| 21.01.2015, 00:03 [ТС] | |
|
DU2, к сожалению, задание на курсовую.
Создайте обобщенный (void*) контейнерный класс (базовый) и от него, используя закрытое наследование, производный класс – шаблон для хранения указателей на абстрактный базовый класс - интерфейс (согласно варианта - стек).
0
|
|
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 21.01.2015, 00:33 | |
|
ваш обобщенный контейнер не должен заниматься удалением памяти, которую он не выделял.
что будет если я захочу в обобщенном контейнере как-то хранить не указатели, а обычные int. он будет их удалять? это будет ошибкой. а если не хранить инты - то это уже не обобщенный. если следовать тз, то обобщенный контейнер может делать только следующие вещи: выделять запрашиваемое количество памяти. удалять выделенную ранее этим же контейнером память (не объекты, а память). для этого ему нужно будет внутри себя вести какую-то статистику что и сколько было выделено по таким-то адресам. а вот создавать и удалять объекты в выделенном памяти уже должны наследники. для этого нужно будет использовать placement new для конструирования объектов в выделенной памяти и явно вызывать деструкторы у объектов для их уничножения. почитайте что-нибудь про аллокаторы памяти. может понятнее будет. Александревску например писал в своей книжке по этой теме (Современное проектирование на C++). может еще где-то что-то есть.
1
|
|
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|||||||||||||||||
| 21.01.2015, 11:21 | |||||||||||||||||
|
виртуальный деструктор в class Interface добавьте еще
Добавлено через 1 час 6 минут и в операторы присваивания const допишите
Добавлено через 4 минуты
Добавлено через 56 секунд Не по теме: DU2, вводите в заблуждение человека Добавлено через 1 минуту соглашусь только с одним пунктом, pop и clear не должны вызывать delete для элементов Добавлено через 4 минуты ну и
0
|
|||||||||||||||||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|
| 21.01.2015, 13:15 [ТС] | |
|
aLarman, с std::string не прокатит: по заданию, преподу принципиально, чтобы не было никаких других строк, кроме char*.
Спасибо, остальное поправил. И все-таки, можно ли поправить эту конструкцию так, чтобы она работала, верней, что именно идет не так, и как это исправить?
0
|
|
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
||||||||||||
| 21.01.2015, 13:37 | ||||||||||||
|
Вам же я написал что поправить)
в операторы присваивания дописать const(возвращаемое значение ссылка на константу) в
и
0
|
||||||||||||
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
|
| 21.01.2015, 13:59 [ТС] | |
|
aLarman, это целые вектора с объектами классов-наследников
0
|
|
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
| 21.01.2015, 14:07 | |
|
это понятно, эти переменные где хранятся?
0
|
|
|
3 / 3 / 1
Регистрация: 25.12.2014
Сообщений: 63
|
||||||
| 21.01.2015, 14:15 [ТС] | ||||||
|
Векторы объявлены глобально, заполняются объектами, которые создаются конструктором с параметрами с помощью данных из текстового файла.
Кликните здесь для просмотра всего текста
0
|
||||||
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
| 21.01.2015, 14:23 | |
|
unit37, окей, после исправления приведенных ошибок проблема осталась?
0
|
|
| 21.01.2015, 14:23 | |
|
Помогаю со студенческими работами здесь
20
Ошибка при реализации стека Определить типы данных и подпрограммы для реализации контейнера — полный дек связной памяти
Реализация контейнера в ООП Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|