Помогите решить данную проблему
#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, а то не слинкуется...
