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

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

16.03.2020, 12:07. Показов 1283. Ответов 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,531
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru