Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将对象向量写入文件?_C++_Vector - Fatal编程技术网

C++ 如何将对象向量写入文件?

C++ 如何将对象向量写入文件?,c++,vector,C++,Vector,我编写了一份旅行预订登记申请表。我想把预订的信息写进文件里。一个用于火车旅行,另一个用于飞机旅行。例如,我决定将火车预订放在一个向量中,我想将该向量的内容写入一个文本文件。我仍然要将其他对象添加到该向量中。问题是我没有找到一种方法将向量的内容写入文件。我尝试了下面的方法,我从一个例子中得到了它,但我想它不适合我的情况,因为它不起作用。你能帮我吗 #include <cstdlib> #include <iostream> #include "Data.h" #includ

我编写了一份旅行预订登记申请表。我想把预订的信息写进文件里。一个用于火车旅行,另一个用于飞机旅行。例如,我决定将火车预订放在一个向量中,我想将该向量的内容写入一个文本文件。我仍然要将其他对象添加到该向量中。问题是我没有找到一种方法将向量的内容写入文件。我尝试了下面的方法,我从一个例子中得到了它,但我想它不适合我的情况,因为它不起作用。你能帮我吗

#include <cstdlib>
#include <iostream>
#include "Data.h"
#include "Person.h"
#include "Reservation.h"
#include "FlightReservation.h"
#include "TrainReservation.h"
#include <vector>
#include <iterator>
#include <fstream>

using namespace std;

int main(int argc, char** argv) {

    Data data(1,1,2020);
    Person person("George", "Man");
    TrainReservation train(data, person, "common", 100, 50);

    Data data2(1,6,2020);
    Person person2("Ana", "Woman");
    FlightReservation flight(data2, person2, "ABC1180", "50A");

    cout<<"Data:\n"<<train.data<<endl;
    cout<<"Customer:\n"<<train.getCustomer()<<endl;
    cout<<"Train: "<<train.getTrain()<<", vagon: "<<train.getVagon()<<", seat: "<<train.getSeat()<<endl;

    cout<<"Data:\n"<<flight.data<<endl;
    cout<<"Customer:\n"<<flight.getCustomer()<<endl;
    cout<<"Flight: "<<flight.getFlight()<<", seat: "<<flight.getSeat()<<endl;

vector<TrainReservation> v;
v.push_back(train);

fstream f("test.txt", ios::out);
for(vector<FlightReservation>::iterator i = v.begin(); i != v.end() ; ++i)
{

f.write((char *)&(*i),sizeof(*i));

}
f.close();

    return 0;
}
#包括
#包括
#包括“Data.h”
#包括“Person.h”
#包括“Reservation.h”
#包括“FlightReservation.h”
#包括“TrainReservation.h”
#包括
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv){
数据(112020);
人(“乔治”,“人”);
列车预定列车(数据,人员,“普通”,100,50);
数据2(162020);;
个人2(“安娜”,“女性”);
航班预订航班(数据2,人员2,“ABC1180”,“50A”);

通常使用二进制I/O( FrWreWe()/Cuff> >)输出C++类的实例是非常不可取的,特别是如果C++类或其任何成员都具有虚函数时,请查阅POD类型(或“标准布局”类型在最近的C++标准中的概念)。有关可安全执行二进制I/O的类型的详细信息。此外,默认情况下,
fstream
不会以二进制模式打开,并且对非二进制流使用二进制I/O的效果未定义。请查看序列化。不要尝试使用您不懂的代码。您无法理解它。如果您想要要将一个向量编码为字节流(文件就是这样的),然后决定使用一种编码形式,并编写与这种编码形式转换的代码。