class Book {//SECONDARY CLASS, CREATED FOR HOLDING THE LIST OF WRITER'S BOOKS
private:
char *name[BOOKSIZE];
int year;
public:
//CONSTRUCTORS START
Book() {
*name = "Undefined Book!";
year = 0;
}
Book(char _name[], int _year) {
*name = _name;
year = _year;
}
Book(const Book &_book) {
*name = *_book.name;
year = _book.year;
}
//CONSTRUCTORS END
//METHODS START
void addToList(Book list[SIZE], int i) {
*list[i].name = *name;
list[i].year = year;
}
void printBook() {
cout << "Name: " << name << endl;
cout << "Year: " << year << endl;
}
void deleteBook() {
*name = "Undefined Book!";
year = 0;
}
char *getName() {
return *name;
}
int getYear() {
return year;
}
//METHODS END
};
Это мой второй класс "Книга".
class Writer {//MAIN CLASS
private:
char *name[20];
char *surname[20];
int age;
Book *books;
int i = 0;
public:
//CONSTRUCTORS START
Writer() {
*name = "Undefined Name";
*surname = "Undefined Surname";
age = 0;
books = new Book[SIZE];
}
Writer(char _name[20], char _surname[20], int _age, Book _book) {
*name = _name;
*surname = _surname;
age = _age;
_book.addToList(books, i);
i++;
books = new Book[SIZE];
}
Writer(char _name[20], char _surname[20], int _age) {
*name = _name;
*surname = _surname;
age = _age;
books = new Book[SIZE];
}
Writer(const Writer &_writer) {//COPY CONSTRUCTOR
*name = *_writer.name;
*surname = *_writer.surname;
age = _writer.age;
for (int m = 0; m < SIZE; m++) {
books[m] = _writer.books[m];
}
i = _writer.i;
}
~Writer() {//DESTRUCTOR
delete [] books;
}
//CONSTRUCTORS END
//METHODS START
void printAuthor() {
cout << "PRINTING AUTHOR..." << endl;
cout << "Name: " << *name << endl;
cout << "Surname: " << *surname << endl;
cout << "Age: " << age << endl;
cout << "Books: " << endl;
for (int j = 0; j < SIZE; j++) {
if (strcmp(books[j].getName(), "Undefined Book!") != 0) {
cout << books[j].getName() << ", " << books[j].getYear() << endl;
}
}
cout << "==================" << endl;
}
void printBooks() {
cout << "Books of " << name << " " << surname << ":" << endl;
for (int j = 0; j < SIZE; j++) {
if (strcmp(books[j].getName(), "Undefined Book!") != 0) {
cout << books[j].getName() << ", " << books[j].getYear() << endl;
}
}
}
void addToAuthor(Book book) {
book.addToList(books, i);
i++;
}
void deleteFromAuthor(Book book) {
int i = 0;
while ((strcmp(books[i].getName(), book.getName()) != 0) && (books[i].getYear() != book.getYear())) {
i++;
}
books[i].deleteBook();
}
//METHODS END
//OPERATOR OVERLOADING STARTS
void operator >>(Book book) {
addToAuthor(book);
}
void operator <<(Book book) {
deleteFromAuthor(book);
}
void operator ++() {
printAuthor();
}
void operator --() {
printBooks();
}
//OPERATOR OVERLOADING ENDS
};
А это мой основной класс "Писатель". Итак, моя домашняя работа - написать конструктор копирования для класса Writer.
int main() {
Writer tolstoy("Leo", "Tolstoy", 82);
Book war_and_peace("War and Peace", 1870);
tolstoy.addToAuthor(war_and_peace);
Writer _writer("Writer", "Surname", 18);
Book book("The Book", 2020);
_writer.addToAuthor(book);
tolstoy.printAuthor();
_writer = tolstoy;
return 0;
}
И это моя «основная» функция. Проблема в том, что я получаю непонятную ошибку: Поток 1: сигнал SIGABRT
это происходит на линии _writer = tolstoy;
, а затем указывает на строку
~Writer() {//DESTRUCTOR
delete [] books;
}
Я не очень понять описание этой ошибки, и я получаю его довольно часто.