[英](C++) Writing and reading a dynamic array to a binary file
我是新來的,如果我犯了一些錯誤,請原諒我。 無論如何,我在這里有這段代碼:
class List{
private:
int dim;
Reservations *res; //Dynamic array of reservations that composes "List"
public:
List();
List(int dm, Reservations *resv);
~List();
int getDim();
void setDim(int dm);
void readNwrite(List &ls);
};
這是一個 class,我需要在二進制文件中寫入和讀取 Reservations 數組。 保留 class 由其他類型的數據(兩個字符串,一個 integer 和另一個類)組成。 在這里您可以看到預訂 class:
class Reservations{
private:
DateTime dt;
string name, phone;
int codVisit;
public:
Reservations();
Reservations(DateTime datT, string nm, string tel, int cod);
~Reservations();
DateTime getDt();
void setDt(DateTime datT);
string getName();
void setName(string nm);
string getTel();
void setTel(string tel);
int getCodVisit();
void setCodVisit(int cod);
void read();
void print();
};
這是 class 日期時間:
class DateTime{
private:
Date d;
int sec, min, hrs;
public:
DateTime();
DateTime(int s, int m, int o, int d, int ms, int y);
~DateTime();
void getDt();
void setDt(int g, int ms, int y);
int getSec();
void setSec(int s);
int getMin();
void getMin(int m);
int getOre();
void getOre(int o);
void print();
void read();
int validate();
int compare(DateTime dt1);
friend void Anglform(DateTime dt);
};
這就是我在列表 class 中創建和讀取二進制文件的方式:
void List::readNwrite(List &ls){
ofstream file("list.dat", ios::binary);
file.write(reinterpret_cast<char*>(res), sizeof(Reservations) * dim);
file.close();
ifstream fileF("list.dat", ios::binary);
ls.setDim(dim);
ls.res = new Reservations[ls.dim];
fileF.read(reinterpret_cast<char*>(ls.res), sizeof(Reservations) * dim);
file.close();
}
我已經嘗試過了,但它不起作用。 我知道第二個實例正在獲取第一個實例的內容,但最后程序總是崩潰......
為了能夠將結構作為二進制 blob 讀取/寫入文件,該結構必須是 標准布局類型(又名 POD),並且其中不包含任何指針。 您的結構顯然不滿足該要求( std::string
object 不是標准布局類型,並且確實包含內部指針),因此您必須編寫讀/寫方法以按成員加載/存儲數據成員或使用為此目的而設計的圖書館。
注意:您的 class Reservations
違反了 3/5/0 規則,並且您在此行有 memory 泄漏:
ls.res = new Reservations[ls.dim];
您最好將std::vector
用於動態數組,或者如果您至少不能使用智能指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.