Помогите решить данную проблему

#include <iostream>  
#include <cstring> 
#include <cassert> 
#include <stdio.h> 
#pragma warning(disable : 4996)

double fRand(double fMin, double fMax)
{
    double f = (double)rand() / RAND_MAX;
    return fMin + f * (fMax - fMin);
}

int iRand(int iMin, int iMax)
{
    return rand() % (iMax - iMin + 1) + iMin;
}

class Book {
public:

    Book(char* au, int vol, int age_rest, char* jr, char* nb);

    void setVolumeBook(int vol); // Установка объема книги
    void setAgeRestBook(int age_rest); //Установка возрастных ограничений
    //void setMarksBook(int marks); // Установка оценки книги
    void setGenreBook(char* jr);  // Установка жанра книги
    void setNameBook(char* nb);   // Установка названия книги  
    void setAuthorBook(char* au); // Установка имени автора книги 


    int getVolumeBook() { return volume; }
    int getAgeRestBook() { return ageRestrictions; }
    /*int getMarksBook() { return marks; }*/
    char* getGenreBook() { return genre; }
    char* getNameBook() { return  name_book; }
    char* getAuthorBook() { return author; }

    void printBook();
    ~Book();

private:
    int volume; //объем книги
    int ageRestrictions; //возрастные ограничения 
    //int marks; //оценка книги
    char* genre; // жанр книги 
    char* name_book; //наименование книги
    char* author; //автор книги 
};

Book::Book(char* au, int vol, int age_rest, char* jr, char* nb) {
     setVolumeBook(vol); // Установка объема книги
     setAgeRestBook(age_rest); //Установка возрастных ограничений
     //setMarksBook(marks); // Установка оценки книги
     setGenreBook(jr);  // Установка жанра книги
     setNameBook(nb);   // Установка названия книги  
     setAuthorBook(au); // Установка имени автора книги 
}

void Book::setAuthorBook(char* au)
{
    // Проверка и выделение памяти для поля - Автор 
    int len = strlen(au);
    if (0 <= len && len < 256) { // Проверка диапазона, должен быть меньше 255 
        author = new char[strlen(au) + 1]; // Выделение памяти в 255 байт плюс завершающий символ 
        assert(author != 0);  // Проверка выделения памяти 
        strcpy(author, au);  // Копирование... 
    }
    else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
        std::cout << " Error! Lenght > 256 bytes!";
}
// Функция установки Названия книги 
void Book::setNameBook(char* nb)
{
    // Проверка и выделение памяти для поля - Имя Книги 
    int len = strlen(nb);
    if (len >= 0 && len < 256) { // Проверка диапазона, должен быть меньше 255 
        name_book = new char[strlen(nb) + 1]; // Выделение памяти в 255 байт плюс завершающий символ 
        assert(name_book != 0);  // Проверка выделения памяти 
        strcpy(name_book, nb);  // Копирование... 
    }
    else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
        std::cout << " Error! Lenght > 256 bytes!";
}
// Функция установки Жанра Книги 
void Book::setGenreBook(char* jr)
{
    // Проверка и выделение памяти для поля - Жанр 
    int len = strlen(jr);
    if (len >= 0 && len < 256) { // Проверка диапазона, должен быть меньше 255 
        genre = new char[strlen(jr) + 1]; // Выделение памяти в 255 байт плюс завершающий символ 
        assert(genre != 0);  // Проверка выделения памяти 
        strcpy(genre, jr);  // Копирование... 
    }
    else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
        std::cout << " Error! Lenght > 256 bytes!";
}

void Book::printBook()
{
    std::cout << " Author Book: " << author << std::endl;
    std::cout << " Name Book: " << name_book << std::endl;
    std::cout << " Janre Book: " << genre << std::endl;
    std::cout << " Age restrixtions: " << ageRestrictions << std::endl;
    std::cout << " Volume book: " << volume << std::endl;
}

Book::~Book()
{
}


//class Library {
//public:
//private:
//};
//
//class Visitor {
//public:
//private:
//};

int main()
{
    /*Book b(iRand(3,4), 34, 5, "Detective", "Sherlock Homs", "Conan Doyle");*/

    Book b("Conan", 0, 5, "Detective", "Sherlock Homs");


    b.printBook();
}

введите сюда описание изображения

Ошибка (активно) E0289 отсутствуют экземпляры конструктора "Book::Book"


Ответы (1 шт):

Автор решения: Harry

Замените ваши функции-члены на

Book(const char* au, int vol, int age_rest, const char* jr, const char* nb);
void setGenreBook(const char* jr);  // Установка жанра книги
void setNameBook(const char* nb);   // Установка названия книги  
void setAuthorBook(const char* au); // Установка имени автора книги 

с соответствующим изменением в реализации.

И как совет — используйте const везде, где можно :)

P.S. Да, и напишите реализацию setVolumeBook и setAgeRestBook, а то не слинкуется...

→ Ссылка