0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 200
1

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

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

Проблема в 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2019, 04:52
Ответы с готовыми решениями:

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

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

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

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

4
С чаем беда...
Эксперт CЭксперт С++
9072 / 4604 / 1250
Регистрация: 18.10.2014
Сообщений: 10,302
21.08.2019, 05:02 2
Цитата Сообщение от EvilingDark Посмотреть сообщение
мне нужна пустая переменная.
Что такое "пустая переменная"? В С++ нет никаких "пустых переменных".

Хотите Library lib; - предоставляйте конструктор по умолчанию.
0
nd2
3415 / 2795 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
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
3415 / 2795 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
21.08.2019, 05:07 5
Цитата Сообщение от EvilingDark Посмотреть сообщение
До того как я добавил строки 25-27 из Library.h все работало.
Если в классе нет своих конструкторов, то используется неявный конструктор по умолчанию, когда добавляешь свои конструкторы, то нужно явно задать конструктор по умолчанию.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2019, 05:07

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.