Ошибка доступа C ++, проблема с указателем - PullRequest
0 голосов
/ 28 апреля 2018

Я работаю над сохранением объектов в файл и их чтением. Прямо сейчас я пытаюсь сделать их по одному, чтобы увидеть, смогу ли я сделать и избежать дублирования объектов. Я получаю эту ошибку: Exception thrown at 0x00915B18 in who.exe: 0xC0000005: Access violation writing location 0xDDDDDDDD

Я знаю, что это потому, что я неправильно что-то делаю с указателем, но я потерян и не могу понять, текущий код:

#include<iostream>
#include "Book.h"
#include "InventoryBook.h"
#include "SoldBook.h"
#include<string>
#include<fstream>
using namespace std;

void saveBook(Book);
Book returnBook();

void main() {

    Book novel;
    InventoryBook shelf;
    SoldBook gone;
    novel.setAuthor("Joe");
    novel.setISBN("1234567788");
    novel.setPublisher("Me");
    novel.setTitle("Joe vs. the Volcano");

    saveBook(novel);
    Book rBook = returnBook();
    cout << rBook.getAuthor(); 

    system("Pause");
}

void saveBook(Book saved) {
    ofstream myfile;

    myfile.open("bookInventory.txt", ios::app);

    myfile.write((char*)&saved, sizeof(saved));

}

Book returnBook() {
    ifstream myfile;

    myfile.open("bookInventory.txt", ios::in);

    Book novel;
    Book newBook;

    myfile.read((char*)&novel, sizeof(novel));

    newBook.setAuthor(novel.getAuthor());


    return newBook;
}

Я знаю, что функция сохранения книги работает и что я столкнулся с проблемами с возвращенным объектом книги. Я просто не могу увидеть, где это идет не так. Я немного нечеткий на указатели.

#pragma once
#ifndef BOOK_H
#define BOOK_H
#include<iostream>
using namespace std;


class Book{

private:
    string ISBN;
    string bookTitle;
    string authorName;
    string publisher;

public:
    Book(string, string, string, string);
    Book();
    //destructor
    ~Book();
    //Mutators
    void setTitle(string);
    void setISBN(string);
    void setAuthor(string);
    void setPublisher(string);
    //accessors
    string getTitle();
    string getISBN();
    string getAuthor();
    string getPublisher();

};

#endif
#include "Book.h"


Book::Book() {
    ISBN = "";
    bookTitle = "";
    authorName = "";
    publisher = "";
}

Book::Book(string newISBN, string newTitle, string newAuthor, string newPub) {

    ISBN = newISBN;
    bookTitle = newTitle;
    authorName = newAuthor;
    publisher = newPub;
}

Book::~Book()
{
}

void Book::setISBN(string newISBN) {
    ISBN = newISBN;
}

string Book::getISBN() {
    return ISBN;
}

void Book::setTitle(string newTitle) {
    bookTitle = newTitle;
}

string Book::getTitle() {
    return bookTitle;
}

void Book::setAuthor(string newAuthor) {
    authorName = newAuthor;
}

string Book::getAuthor() {
    return authorName;
}

void Book::setPublisher(string newPub) {
    publisher = newPub;
}

string Book::getPublisher() {
    return publisher;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...