Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
4 / 4 / 0
Регистрация: 11.09.2017
Сообщений: 100

Ошибки при компиляции программы c++

16.03.2020, 12:07. Показов 1316. Ответов 6
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, написал программу по заданию
Составить программу, которая содержит текущую информацию о
книгах в библиотеке. Сведения о книгах включают:
номер УДК; фамилию и инициалы автора;
название; год издания;
количество экземпляров данной книги в библиотеке. Программа
должна обеспечивать:
начальное формирование данных обо всех книгах в библиотеке в
виде списка;
при выдаче каждой книги на руки вводится номер УДК, и программа
уменьшает значение количества книг на единицу или выдает
сообщение о том, что требуемой книги в библиотеке нет или
требуемая книга находится на руках;
при возвращении каждой книги вводится номер УДК, и программа
увеличивает значение количества книг на единицу;
по запросу выдаются сведения о наличии книг в библиотеке.

я написал код
main.cpp
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include "Node.h"
#include "Data.h"
#include "List.h"
#include "windows.h"
using namespace std;
 
int main(int argc, const char* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    List list;
 
    //list.add({ 1, "qwer", "afadf", 23, 23});
    //list.add({ 4, "qwer", "afadf", 24, 2345 });
    //list.add({ 56, "qwer", "afadf", 1, 234 });
    //list.add({ 23, "qwer", "afadf", 53, 12 });
 
    cout << list << endl;
 
    list.remove(list.find(1));
 
    cout << list << endl;// cout << list << endl;   cout << list << endl;
    
    
 
 
    return 0;
    int choose = 0;
    while (choose != 6)
    {
        cout << "1. Добавить" << endl;
        cout << "2. Выдать" << endl;
        cout << "3. Удалить книгу" << endl;
        cout << "4. Вывести все книги" << endl;
        cout << "5. Вернуть книгу" << endl;
        cout << "6. Выход" << endl;
 
        cout << "Выбор: ";
        cin >> choose;
        cin.ignore();
 
        switch (choose)
        {
        case 1:
        {
            Data data;
            cin >> data;
 
            Node* node = list.find(data.getNum());
            if (node == nullptr)
            {
                list.add(data);
            }
            else
            {
                cout << "Такой УДК уже есть" << endl;
            }
        }
        break;
        case 2:
        {
            cout << "УДК: ";
            int num;
            cin >> num;
            cin.ignore();
 
            Node* node = list.find(num);
            if (node != nullptr)
            {
                if (node->getData().getBusy())
                {
                    cout << "Уже выдана" << endl;
                }
                else
                {
                    cout << "Выдана" << endl;
                    Data d = node->getData();
                    d.setBusy(true);
                    node->setData(d);
                }
            }
            else
            {
                cout << "Нет такого" << endl;
            }
        }
        break;
        case 3:
        {
            cout << "УДК: ";
            int num;
            cin >> num;
            cin.ignore();
            Node* node = list.find(num);
 
            if (node == nullptr)
            {
                cout << "Нет таких" << endl;
            }
            else
            {
                list.remove(node);
                cout << "Удалено!" << endl;
            }
        }
 
        break;
        case 4:
            cout << list;
            break;
        case 5:
        {
            cout << "УДК: ";
            int num;
            cin >> num;
            cin.ignore();
            Node* node = list.find(num);
            if (node != nullptr)
            {
                if (!node->getData().getBusy())
                {
                    cout << "Не занята" << endl;
                }
                else
                {
                    Data d = node->getData();
                    d.setBusy(false);
                        node->setData(d);
                }
            }
            else
            {
                cout << "Нет такого" << endl;
            }
        }
 
        break;
 
        case 6:
            break;
 
        default:
            choose = 6;
            break;
        }
    }
 
    return 0;
}
Data.h
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
#ifndef Data_h
#define Data_h
#include <iostream>
#include <cstring>
using namespace std;
class Data
{
public:
 
    Data() = default;
    Data(int n, const string& a, const string& t, int id, int y)
        : num(n), count(1), author(a), title(t), onHands(false) {}
 
    void setNum(int x) { num = x; }
    int getNum() const { return num; }
 
    void setCount(int x) { count = x; }
    int getCount() const { return count; }
 
    void setAuthor(string str) { author = str; }
    string getAuthor() const { return author; }
 
    void setTitle(string str) { title = str; }
    string getTitle() const { return title; }
 
    void setYear(int x) { year = x; }
    int getYear() const { return year; }
 
    void setBusy(bool value) { onHands = value; }
    bool getBusy() const { return onHands; }
 
    friend istream& operator>>(istream& in, Data& data);
    friend bool operator==(const Data& data, const Data& data2);
    friend bool operator!=(const Data& data, const Data& data2);
 
private:
    int num;
    int count;
    string author;
    string title;
    int year;
    bool onHands;
};
 
#endif /* Data_h */
List.cpp
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include "List.h"
using namespace std;
List::List(const List& list) : List()
{
    if (list.count() == 0)
        return;
 
    Node* node = list.first();
    for (int i = 0; i < list.count(); i++)
    {
        add(node->getData());
        node = node->getNext();
    }
}
 
List::~List()
{
    if (count() == 0)
        return;
 
    Node* node = begin;
 
    while (node != nullptr)
    {
        Node* next = node->getNext();
        delete node;
        node = next;
    }
}
 
ostream& operator<<(ostream& out, const List& list)
{
    if (list.count() == 0)
    {
        out << "Empty!" << endl;
        return out;
    }
 
    Node* node = list.first();
    while (node != nullptr)
    {
 
        out << node;
        node = node->getNext();
    }
    return out;
}
 
bool operator==(const List& list, const List& list2)
{
    if (list.count() != list2.count())
        return false;
 
    Node* node1 = list.first();
    Node* node2 = list2.first();
    for (int i = 0; i < list.count(); i++)
    {
        if (node1->getData() != node2->getData())
            return false;
 
        node1 = node1->getNext();
        node2 = node2->getNext();
    }
 
    return true;
}
 
bool operator!=(const List& list, const List& list2)
{
    return !(list == list2);
}
 
void List::add(Data data)
{
    Node* node = new Node(data);
 
 
    if (count() == 0)
        begin = node;
 
    node->setNext(nullptr);
    node->setPrev(end);
 
    if (end != nullptr)
        end->setNext(node);
 
    end = node;
 
    length++;
}
 
bool List::remove(Node* node)
{
    if (!find(node->getData().getNum()))
        return false;
 
    if (node->getPrev())
        node->getPrev()->setNext(node->getNext());
    if (node->getNext())
        node->getNext()->setPrev(node->getPrev());
 
    length--;
    return true;
}
 
Node* List::find(int key)
{
    Node* node = begin;
 
    while (node != nullptr)
    {
        if (node->getData().getNum() == key)
        {
            //cout << node;
            return node;
        }
        node = node->getNext();
    }
 
    if (node != nullptr)
    {
        if (node->getData().getNum() != key)
        {
            node = nullptr;
        }
    }
 
    return node;
}
List.h
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
#ifndef List_h
#define List_h
 
#include <stdio.h>
#include "Node.h"
using namespace std;
class List
{
public:
    List() : begin(nullptr), end(nullptr), length(0) {};
    ~List();
    List(const List& list);
 
    void add(Data data);
    bool remove(Node* node);
    Node* find(int num);
 
    friend std::ostream& operator<<(std::ostream& out, const List& list);
 
    friend bool operator==(const List& list, const List& list2);
    friend bool operator!=(const List& list, const List& list2);
 
    int count() const { return length; }
    Node* first() const { return begin; }
    Node* last() const { return end; }
 
private:
    int length;
    Node* begin;
    Node* end;
};
 
#endif /* List_h */
Node.h
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
#ifndef Node_h
#define Node_h
#include "Data.h"
#include <iostream>
using namespace std;
class Node
{
public:
    Node(const Data& d) : data(d), next(nullptr), prev(nullptr) {}
    Node(const Node& node);
    friend ostream& operator<<(ostream& out, const Node* node);
 
    Data getData() const { return data; }
    Node* getNext() const { return next; }
    Node* getPrev() const { return prev; }
 
    void setData(Data data) { this->data = data; }
    void setNext(Node* _next) { this->next = _next; }
    void setPrev(Node* _prev) { this->prev = _prev; }
private:
    Data data;
    Node* next;
    Node* prev;
};
 
#endif /* Node_h */
Data.cpp
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
#include <iostream>
#include "Data.h"
 
using namespace std;
istream& operator>>(istream& in, Data& data)
{
    cout << "Название: ";
    string title;
    in >> title;
    data.setTitle(title);
 
    string author;
    cout << "Автор: ";
    in >> author;
    data.setAuthor(author);
 
    cout << "Номер: ";
    int num;
    in >> num;
    data.setNum(num);
    cin.ignore();
 
    return in;
}
 
bool operator==(const Data& data, const Data& data2)
{
    return data.getAuthor() == data2.getAuthor()
        && data.getTitle() == data2.getTitle();
}
 
bool operator!=(const Data& data, const Data& data2)
{
    return !(data == data2);
}
Node.cpp
C++
1
2
3
4
5
6
7
8
9
#include "Node.h"
#include <iostream>
 
ostream& operator<<(ostream& out, const Node* node)
{
    auto data = node->getData();
    out << " Название: " << data.getTitle() << " Автор:  " << data.getAuthor() << " УДК: " << data.getNum() << endl;
    return out;
}
Во время тестирования программы преподаватель смог её сломать. Как он сломал видно в main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    List list;
 
    //list.add({ 1, "qwer", "afadf", 23, 23});
    //list.add({ 4, "qwer", "afadf", 24, 2345 });
    //list.add({ 56, "qwer", "afadf", 1, 234 });
    //list.add({ 23, "qwer", "afadf", 53, 12 });
 
    cout << list << endl;
 
    list.remove(list.find(1));
 
    cout << list << endl;// cout << list << endl;   cout << list << endl;
    
    
 
 
    return 0;
после чего программа выдаёт ошибку(скриншот)
Подскажите как это исправить
Миниатюры
Ошибки при компиляции программы c++  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2020, 12:07
Ответы с готовыми решениями:

Ошибки при компиляции программы c++
Здравствуйте, написал программу по заданию (скриншот) я написал код main.cpp #include &lt;iostream&gt; #include &quot;Line.h&quot; ...

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

Ошибки при компиляции программы
#include &quot;StdAfx.h&quot; #include &quot;math.h&quot; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int main () { ...

6
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
16.03.2020, 12:13
Цитата Сообщение от dimazavt Посмотреть сообщение
Подскажите как это исправить
ты проверки ставил в свои методы, что бы они на пустые указатели адекватно реагировали?
0
4 / 4 / 0
Регистрация: 11.09.2017
Сообщений: 100
16.03.2020, 12:17  [ТС]
_stanislav, да вроде
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
16.03.2020, 12:20
Лучший ответ Сообщение было отмечено dimazavt как решение

Решение

dimazavt, тут ошибка по ходу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool List::remove(Node* node) // Если nullptr 
{
    if (!find(node->getData().getNum())) // node->getData() ошибка
        return false;
 
    if (node->getPrev())
        node->getPrev()->setNext(node->getNext());
    if (node->getNext())
        node->getNext()->setPrev(node->getPrev());
 
    length--;
    return true;
}
0
4 / 4 / 0
Регистрация: 11.09.2017
Сообщений: 100
16.03.2020, 14:14  [ТС]
_stanislav, можешь подсказать как исправить???
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
16.03.2020, 14:32
dimazavt, то есть ты написал программу строк так на 500 сам и тебе не потребовалось для этого подсказок, а чтобы вставить одну строчку в место, которое заведомо найдено для тебя Станиславом, тебе нужна помощь?
Хмм... подозрительно, а сам ли ты всё остальное писал?
0
4 / 4 / 0
Регистрация: 11.09.2017
Сообщений: 100
11.04.2020, 17:16  [ТС]
Kuzia domovenok, я пофиксил и всё работает. Спасибо за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.04.2020, 17:16
Помогаю со студенческими работами здесь

При компиляции простой программы - ошибки
Работаю в простой IDE. Занимаюсь по учебникам и по видео на ютубе, при компиляции кода появляются ошибки (покажу на скриншоте) Причем я...

Синтаксические ошибки при компиляции программы
Доброго времени суток ребят, у меня к вам просьба, посмотреть в чем проблема. #include&lt;iostream&gt; using namespace std; int...

При компиляции программы возникли ошибки
Здравствуйте. Есть программа для работы с указателями и не хочет собираться, вот привожу исходный код: #include &lt;iostream&gt; ...

При компиляции программы в dev C++ выдает ошибки
http://files.mail.ru/0JL3TJ

Синтаксические ошибки при компиляции программы на структуру
#include &lt;iostream&gt; #include &lt;string.h&gt; #define n 4; using namespace std; struct OIL{ char marka; int litri; int cena; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru