C++ C++;访问错误,指针故障
我正在将对象保存到一个文件中,并将其读回。现在我试着一次做一个,看看是否可以避免重复的对象。我收到以下错误:C++ C++;访问错误,指针故障,c++,pointers,C++,Pointers,我正在将对象保存到一个文件中,并将其读回。现在我试着一次做一个,看看是否可以避免重复的对象。我收到以下错误:在who.exe的0x00915B18处引发异常:0xC0000005:访问冲突写入位置0xDDDD 我知道这是因为我没有正确地使用指针进行操作,但我迷路了,无法完全理解,当前代码是: #include<iostream> #include "Book.h" #include "InventoryBook.h" #include "SoldBook.h" #include<
在who.exe的0x00915B18处引发异常:0xC0000005:访问冲突写入位置0xDDDD
我知道这是因为我没有正确地使用指针进行操作,但我迷路了,无法完全理解,当前代码是:
#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;
}
#包括
#包括“Book.h”
#包括“InventoryBook.h”
#包括“SoldBook.h”
#包括
#包括
使用名称空间std;
作废存折;
图书归还书();
void main(){
书籍小说;
目录书架;
索尔德布克走了;
小说作者(“乔”);
novel.setISBN(“1234567788”);
小说出版社(“我”);
小说。片名(“乔vs.火山”);
存折(小说);
Book rBook=returnBook();
如果没有出现异常的行号,可能很难回答,并且头文件std::string
不是您可以直接写入文件并通过强制转换到char*
来读取的内容。如果您调用c_()
方法,这为您提供了一些可序列化的内容。c样式的str是后跟空字节的字符。我建议编写void serialize(of stream&stream)Book
类的
方法。然后按顺序写出每个字符串。您可以想象一个潜在的非序列化
函数类似的情况。其余是详细信息。myfile.write((char*)saved,sizeof(saved));
——我希望停止教授这种类型的编码,或者至少减少这种编码。似乎使用这种完全相同(错误)的编码来“将对象保存到文件”的问题“几天内这里会出现几次。@MichaelPorter底线——您必须以某种可维护的方式保存对象表示的数据,而不是将对象的表示形式保存在内存中,内存中只有一堆神秘的字节。然后在读取时,您从该文件中读取数据,并基于此数据实例化对象,或实例化创建一个“空”对象,并将该对象的每个成员设置为您正在从文件中读取的数据。C
-样式的“将所有内容作为一个blob读写”在这里不起作用。
#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;
}