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

ошибка нет подходящего конструктора по умолчанию, но мне на самом деле нужна пустая переменная

21.08.2019, 04:52. Показов 700. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема в main.cpp строка 15, мне нужна пустая переменная. До того как я добавил строки 25-27 из Library.h все работало. Но после того как я сделал Transaction.h, а конкретно в Transaction.cpp строка 8 думаю именно тогда все пошло по п.... Собственно что делать чтобы она работала?

Весь проект
https://drive.google.com/file/... sp=sharing

Эта программа находится уже на грани моего понимания ее работы, я чувствую что еще немного и я перестану понимать что я делаю.

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
//файл main.cpp
//Программа для учета выданных и доступных книг в библиотеке
 
#include <Header.h>
#include <Book.h>
#include <Patron.h>
#include <Library.h>
#include <Transaction.h>
 
void menu()
{   
    try
    {
        Transaction tr_lib;
        Library lib;
        while (cin) {
            cout << "Введите код требуемой операции: \n" << "1 - выдача книги пользователю" << endl
                << "2 - ввод нового пользователя" << endl << "3 - ввод новой книги" << endl
                << "4 - просмотр всех книг" << endl << "5 - просморт всех пользователей" << endl
                << "6 - просмотр пользователей которым были выданы книги" << endl;
            char ch;
            cin >> ch;
            switch (ch)
            {
            case('1'):
                tr_lib.give_out_book(lib);
                break;
            case('2'):
            {
                Patron p;
                p.enter();
                lib.new_patron(p);
                break;
            }
            case('3'):
            {
                Book b;
                b.enter();
                lib.new_book(b);
                break;
            }
            case('4'):
                lib.book_scroll();
                break;
            case('5'):
                lib.pat_scroll();
                break;
            case('6'):
                tr_lib.print_t_lib();
                break;
            default:
                break;
            }
        }
    }
    catch (exception& e) {
        cerr << "exception: " << e.what() << endl;
        keep_window_open();
        return;
    }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    menu();
    return 0;
}
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
//файл Library.h
#pragma once
#include <Header.h>
#include <Book.h>
#include <Patron.h>
#include <Date.h>
 
class Library
{
public:
    void new_patron(const Patron& p);
    void new_book(const Book& b);
    //пользователи
    string pat_name(int i) const { return patrons[i].name(); }      //возвращает имя пользователя
    int pat_lib_code(int i) const { return patrons[i].lib_code(); }     //библиотечный код пользователя
    bool pat_price_pay(int i) const { return patrons[i].price_pay(); }      //проверка отплаты пользователем
    Patron patron(int i) const { return patrons[i]; }       //все данные о пользователе из библиотеки
    int size_patrons() const { return patrons.size(); }     //размер вектора patrons
    //книги
    bool book_in_stock(int i) const { return books[i].in_stock(); }     //наличие книги в библиотеке
    string book_ISBN(int i) const { return books[i].ISBN(); }       //код ISBN книги
    void book_change_in_stock(int i) { books[i].change_in_stock(); return; }        //изменение наличия книги
    Book book(int i) const { return books[i]; }     //все данные о книге из библиотеке
    int size_books() const { return books.size(); }     //размер вектора books
    Library(Book b, Patron p);
    Library(Patron p);
    Library(Book b);
    void pat_scroll() const;        //печатает всех пользователей
    void book_scroll() const;       //печатает все книги
private:
    vector<Book> books;
    vector<Patron> patrons;
};
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
//файл Library.cpp
#include "Library.h"
 
vector<Book> books;
vector<Patron> patrons;
 
Library::Library(Book b, Patron p)
{
    books.push_back(b);
    patrons.push_back(p);
    return;
}
 
Library::Library(Patron p)
{
    patrons.push_back(p);
    return;
}
 
Library::Library(Book b)
{
    books.push_back(b);
    return;
}
 
void Library::new_patron(const Patron& p)
{
    for (int i = 0; i < patrons.size(); ++i)
    {
        if (p.lib_code() == patrons[i].lib_code())
            error("Пользователь уже существует.");
    }
    patrons.push_back(p);
    return;
}
 
void Library::new_book(const Book& b)
{
    for (int i = 0; i < books.size(); ++i)
    {
        if (b.ISBN() == books[i].ISBN())
            error("Книга уже существует");
    }
    books.push_back(b);
    return;
}
 
void Library::pat_scroll() const
{
    for (int i = 0; i < patrons.size(); ++i)
        cout << endl << "Пользователь: " << patrons[i].name() << endl << 
        "Библиотечный код: " <<patrons[i].lib_code()
        << endl << check_pay(patrons[i]) << endl << endl;
}
 
void Library::book_scroll() const
{
    for (int i = 0; i < books.size(); ++i)
        cout << endl << "Название: " << books[i].name() << endl << 
        "Автор: " << books[i].author()
        << endl << books[i].ISBN() << endl << books[i].genre()
        << endl << check_book(books[i]) << endl << endl;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//файл Transaction.h
#pragma once
#include <Library.h>
 
struct Transaction
{
    void give_out_book(Library& lib);
    int t_lib_code(int i) const { return t_lib[i].pat_lib_code(0); }        //возвращает библиотечный код пользователя
    bool t_price_pay(int i) const { return t_lib[i].pat_price_pay(0); }     //возвращает подтверждение отплаты пользователя
    string t_pat_name(int i) const { return t_lib[i].pat_name(0); }     //возвращает имя пользователя
    void add_patron(const Patron& p);       //добавляет нового пользователя в t_lib
    void add_book(int t_lib_i, int book_i, Library& lib);       //добавляет новую книгу в t_lib
    void print_t_lib();     //печатает t_lib
private:
    vector<Library> t_lib;
};
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
//файл Transaction.cpp
#include "Transaction.h"
 
vector<Library> t_lib;
 
void Transaction::add_patron(const Patron& p)       //добавить нового пользователя в t_lib
{
    t_lib.push_back(Library(p));
    return;
}
 
void Transaction::add_book(int t_lib_i, int book_i, Library& lib)       //добавить новую книгу в t_lib
{
    if (lib.book_in_stock(book_i) == false)
        error("Книга выдана на руки");
    t_lib[t_lib_i].new_book(lib.book(book_i));      //добавляем книгу 
    lib.book_change_in_stock(book_i);       //изменяем наличие книги
    return;
}
 
void Transaction::give_out_book(Library& lib)
{
    cout << "Введите библиотечный код пользователя\n";
    int code, num_patron = -1, num_ISBN = -1;
    string ISBN;
    cin >> code;
    if (code < 0 || code > 100000)
        error("Введенный библиотечный код вне возможного диапозона значений.");
    cout << "Введите код ISBN книги\n";
    cin >> ISBN;
    for (int i = 0; i < lib.size_patrons(); ++i)        //ищем пользователя в библиотеке
        if (code == lib.pat_lib_code(i))
            num_patron = i;
    if (num_patron == -1)
        error("Пользователь не найден");
    for (int i = 0; i < lib.size_books(); ++i)      //ищем книгу в библиотеке
        if (ISBN == lib.book_ISBN(i))
            num_ISBN = i;
    if (num_ISBN == -1)
        error("Книга не найдена");
    if (t_lib.size() == 0)      //присвоить первого пользователя если вектор пуст
        add_patron(lib.patron(num_patron));
    int t_lib_patron = -1;
    for (int i = 0; i < t_lib.size(); ++i)      //ищем пользователя в t_lib
        if (code == t_lib_code(i))
            t_lib_patron = i;
    if (t_lib_patron == -1)     //создаем нового пользователя в t_lib если он не найден
        add_patron(lib.patron(num_patron));
    add_book(t_lib.size() - 1, num_ISBN, lib);      //добавляем книгу в t_lib
    return;
}
 
void Transaction::print_t_lib()
{
    for (int i = 0; i < t_lib.size(); ++i)
    {
        t_lib[i].pat_scroll();
        cout << "Книги выданные пользователю:\n";
        t_lib[i].book_scroll();
    }
    return;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.08.2019, 04:52
Ответы с готовыми решениями:

Ошибка: нет подходящего конструктора по умолчанию
В общем ребят, такая проблема, решил начать обучение плюсов по книжке, там задание создать класс и конструктор с параметром, и в общем суть...

Нет подходящего конструктора по умолчанию
Всем привет :) Есть вот такой код#include &lt;vector&gt; #include &lt;SFML/Graphics.hpp&gt; using namespace sf; class Animation { public:...

Нет подходящего конструктора по умолчанию
написал вот такой код // ConsoleApplication29.cpp: определяет точку входа для консольного приложения. // #include...

4
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12856 / 6722 / 1806
Регистрация: 18.10.2014
Сообщений: 17,020
21.08.2019, 05:02 2
Цитата Сообщение от EvilingDark Посмотреть сообщение
мне нужна пустая переменная.
Что такое "пустая переменная"? В С++ нет никаких "пустых переменных".

Хотите Library lib; - предоставляйте конструктор по умолчанию.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
21.08.2019, 05:03 3
Цитата Сообщение от EvilingDark Посмотреть сообщение
нет подходящего конструктора по умолчанию
Сделай его:
C++
1
Library();
1
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 200
21.08.2019, 05:07  [ТС] 4
Цитата Сообщение от nd2 Посмотреть сообщение
Library();
Спасибо, то что нужно
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
21.08.2019, 05:07 5
Цитата Сообщение от EvilingDark Посмотреть сообщение
До того как я добавил строки 25-27 из Library.h все работало.
Если в классе нет своих конструкторов, то используется неявный конструктор по умолчанию, когда добавляешь свои конструкторы, то нужно явно задать конструктор по умолчанию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.08.2019, 05:07
Помогаю со студенческими работами здесь

Нет подходящего конструктора по умолчанию
#ifndef ANIMATION_H #define ANIMATION_H #include &lt;SFML\Graphics.hpp&gt; class animation { public: std::vector&lt;sf::IntRect&gt;...

Нет подходящего конструктора по умолчанию. Наследование
Скидываю хидер и исходник к нему: хидер(Main_Menu.h): #include &quot;stdafx.h&quot; #ifndef MAIN_MENU_DEF #define MAIN_MENU_DEF 1 ...

Нет подходящего конструктора vector по умолчанию
Не понимаю, как описать #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class Money { ...

C2512: odejda: нет подходящего конструктора по умолчанию
Пытаюсь разобраться с полиморфизмом. Помогите пожалуйтста. #include &lt;string&gt; #include &lt;iostream&gt; using namespace std; ...

Создание лог файла. Нет подходящего конструктора по умолчанию
Добрый день, почему вылетает ошибка не пойму. Ошибка: нет подходящего конструктора по умолчанию. И вторая ошибка Log::Log(void):...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru