如何在C ++中用fstream安全地写/读A类矢量?

时间:2016-07-25 15:37:37

标签: c++ vector fstream

最近我遇到了一个关于将数据读入A类向量的烦人的错误。我编写了一个简单的程序来测试主要功能中的fstream,它没有任何问题。   但是当我在Book.h中编写Book类并在Book.cpp中实现Class时,然后尝试将Book的向量写入带有ofstream的文件中,没有发生错误。

 //write data
ofstream output("book.bat",ios::binary);
        if( !output ){
            exit(-1);
        }
        output.write(reinterpret_cast<char*>(&books[0]),sizeof(Book)*books.size());
          output.close();

 //read data
ifstream input("book.bat",ios::binary);
        if( !input ){
            exit(-1);
        }
        Book tmp;
        while( input.read(reinterpret_cast<char*>(&tmp),sizeof(Book)) ) {
            books.push_back(tmp); 
        }

        input.close();

不幸的是,当程序运行到将文件读入向量的步骤时,发生了错误。搜索了几个小时后,我没有处理这个错误。   谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

对于类作为封装内部表示的类型的观点,使用内存方向读取/写入和类型的大小是错误。这可能适用于POD类型,但如果book是一个类型,其中一些数据作为动态内存的指针,则代码将无效。