С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202

Связный список объектов

29.04.2013, 16:03. Показов 2119. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, необходимо было реализовать иерархию кадры, администрация, инженер, рабочий и
Определить в классе статическую компоненту - указатель на начало связанного списка объектов и статическую функцию для просмотра списка.
Я сделал все классы наследниками от кадров, в список объекты получается добавить, но при удалении или вызове деструктора вылетает ошибка, помогите пож-та найти проблему. Это базовый абстрактный класс:
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
#include <iostream>
#include "Staff.h"
 
using namespace std;
 
Staff * Staff :: begin = 0;
Staff * Staff :: end = 0;
 
Staff :: Staff() {
    name = 0;
    surname = 0;
    experience = 0;
    next = 0;
}
 
Staff :: Staff(char *name, char *surname, int experience) {
    this -> name = new char[strlen(name) + 1];
    strcpy(this -> name, name);
    this -> surname = new char[strlen(surname) + 1];
    strcpy(this -> surname, surname);
    this -> experience = experience > 0 ? experience : 0;
    next = 0;
}
 
Staff :: ~Staff() {
    delete [] name;
    delete [] surname;
 
    if (!isEmpty()) {
        Staff *currentPtr = begin, *tempPtr;
        while (currentPtr != 0) {
            tempPtr = currentPtr;
            currentPtr = currentPtr -> next;
            delete tempPtr;     
        }
    }       
}
 
int Staff :: isEmpty() {
    return begin == 0;
}
 
void Staff :: printElements() {
    if (isEmpty()) {
        cout << "List is empty\n";
        return;
    }
 
    Staff *tempPtr = begin;
    while (tempPtr != 0) {
        tempPtr -> printData();
        tempPtr = tempPtr -> next;
    }
}
 
void Staff :: addElement() {
    if (isEmpty())
        begin = end = this;
    else {
        this -> next = begin;
        begin = this;
    }
}
 
int Staff :: deleteElement() {
    if (isEmpty())
        return 0;
    else {
        Staff *tempPtr = begin;
        if (begin == end)
            begin = end = 0;
        else 
            begin = begin -> next;
        delete tempPtr;
        return 1;
    }
}
Поле next - сделал нестатическим protected. Может быть я неправильно понял, как нужно создавать список, поправьте, если я сделал ошибку, заранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.04.2013, 16:03
Ответы с готовыми решениями:

Упорядоченный связный список объектов класса
Добрый вечер, вот уже третий день бьюсь в попытках создания связного списка из объектов класса. Задача: создать таблицу символов, в...

Связный список (Используя структуру описания даты, построить связный список студентов, сформированный в алфавитном порядке)
Здраствуйте! Помогите пожалуйста найти косяк. Выводится только первая строчка из списка студентов. Вот такая задачка : Программа...

Список: связный список, в котором информация о книгах сортируется по убыванию стоимости.
Друзья помогите с реализацией списка. Нужно запрограммировать связный список, в котором информация о книгах сортируется по убыванию...

9
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.04.2013, 16:08
Kreativ, деструктор виртуальный? И я бы рекомендовал Вам использовать std::string вместо char*.
1
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
29.04.2013, 16:15  [ТС]
да, деструктор виртуальный, std :: string можно конечно, правда навряд ли там кроется ошибка, но сейчас попробую изменить
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
29.04.2013, 16:24
C++
1
2
3
4
while (tempPtr) { // != 0 лучше заменить на != NULL, либо вот так, может поможет
        tempPtr -> printData();
        tempPtr = tempPtr -> next;
    }
Добавлено через 2 минуты
замените везде 0 на NULL, когда к объектам применяется
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
29.04.2013, 16:31  [ТС]
заменил везде, не помогло ( . Начал отладку, в мэйне:
C++
1
2
3
Engineer obj1("Kino", "Kino", 20, 10.2, 3);
obj1.addElement();
obj1.deleteElement();
зашел в метод :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int Staff :: deleteElement() {
    if (isEmpty())
        return 0;
    else {
        Staff *tempPtr = begin;
        if (begin == end)
            begin = end = 0;
        else 
            begin = begin -> next;
        delete tempPtr;
        return 1;
    }
}
на строке delete tempPtr; значение tempPtr правильное, хранит тот объект который нужно удалить, после выполнения строки прога просто зависла. Попробовал убрать в мэйне строку удаления совсем чтобы деструктор сам вызвался, вот в нем:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Staff :: ~Staff() {
    delete [] name;
    delete [] surname;
 
    if (!isEmpty()) {
        Staff *currentPtr = begin, *tempPtr;
        while (currentPtr != 0) {
            tempPtr = currentPtr;
            currentPtr = currentPtr -> next;
            delete tempPtr;     
        }
    }       
}
переменная begin не хранит значение объекта, который должен там быть по идее, хотя пошагово проверил addElement() там begin проинициализировался правильно, не понимаю в чем ошибка
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.04.2013, 16:34
Kreativ, а std::list вообще можно использовать?
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
29.04.2013, 16:34
Kreativ, дайте кусочек кода, где вы создаёте этот объект и удаляете. Там где ошибка у вас, я оттдебажу.
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
29.04.2013, 19:26  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Kreativ, а std::list вообще можно использовать?
узнал у одногруппника, нет нельзя (

Цитата Сообщение от Ternsip Посмотреть сообщение
Kreativ, дайте кусочек кода, где вы создаёте этот объект и удаляете. Там где ошибка у вас, я оттдебажу.
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
#include <iostream>
#include "Engineer.h"
#include "Staff.h"
#include "Worker.h"
 
using namespace std;
int main() {
        Engineer obj1("Lev", "Lev", 20, 10.2, 3);
    Worker obj2("Sobaka", "Sobaka", 10, 9.9, 4);
    Engineer obj3("Kot", "Kot", 20, 9.9, 2);
    Worker obj4("Ptica", "Ptica", 15, 2.3, 1);
 
    obj1.addElement();
    obj2.addElement();
    obj3.addElement();
    obj4.addElement();
 
    Staff :: printElements();
 
    obj1.deleteElement();
    
    cout << "asdasd" << endl;   
        return 0;
}
Добавлено через 2 часа 39 минут
эх, неужели никто не сможет помочь
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
29.04.2013, 21:19
Kreativ, залей .h файлы плз
C++
1
2
3
#include "Engineer.h"
#include "Staff.h"
#include "Worker.h"
вот эти
0
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
29.04.2013, 21:42  [ТС]
архив
Вложения
Тип файла: rar Lab2.rar (2.4 Кб, 25 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2013, 21:42
Помогаю со студенческими работами здесь

Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента
Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента

Связанный список. Создать, записать в связный список последовательность слов,обозначающих месяцы года,заданных пользователем
Создать связанный список.Кроме информационных полей он должен обязательно содержать указатели на предыдущий и следующий за ним...

Связный список
Здравствуйте. Подскажите информацию насчет связных списков. Книгу, или сайтик.

Связный список
Создать связанный список целых чисел, расположенных по возрастанию. Включить в список три числа, не нарушая упорядоченности. +ввод +вывод...

Связный список
Не получается нормально скомпоновать файлы :( Сделал связный список использую шаблоны класса. Файл ListSpisok.h и есть сам связный...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru