Резьба 1: сигнал SIGABRT; C ++ - PullRequest
0 голосов
/ 05 апреля 2020
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;
    }

Я не очень понять описание этой ошибки, и я получаю его довольно часто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...