
Hi all, I am having following problem while reading the data out of the file using one of the sample program provided in boost serialization example online. I am trying to read the file having multiple gps_position objects but getting following exception. Can someone please let me know what might be the problem here. Let me know if you need any more information: #include <fstream> #include <string> // include headers that implement a archive in simple text format #include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/serialization/list.hpp> #include <boost/serialization/vector.hpp> #include <boost/serialization/base_object.hpp> ///////////////////////////////////////////////////////////// // gps coordinate // // illustrates serialization for a simple type // class gps_position { private: friend class boost::serialization::access; // When the class Archive corresponds to an output archive, the // & operator is defined similar to <<. Likewise, when the class Archive // is a type of input archive the & operator is defined similar to >>. template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & degrees; ar & minutes; ar & seconds; ar & day; } public: int degrees; int minutes; float seconds; std::string day; gps_position(){}; gps_position(int d, int m, float s, std::string inDay) : degrees(d), minutes(m), seconds(s), day(inDay) {} }; int main() { // create and open a character archive for output std::ofstream ofs("filename"); // create class instance const gps_position g(35, 59, 24.567f, "Monday_Pointer"); const gps_position g1(45, 69, 34.567f, "Tuesday_Pointer"); const gps_position * g2 = new gps_position(1,2,3.3, "WEDNESDAY_PTR"); { boost::archive::text_oarchive oa(ofs); oa << g; oa << g1; oa << (*g2); } { /**gps_position g; std::vector<gps_position> vec; std::ifstream ifs("filename"); boost::archive::text_iarchive ia(ifs); while (!ifs.eof()) { std::cout << " ++++++++++++++++ " << std::endl; ia >> g; std::cout << g.degrees << " : " << g.minutes << " : " << g.seconds << " : " << g.day <<std::endl; std::cout << " **************** " << std::endl; }*/ } { // Using boost vector std::vector<gps_position> gps; std::ifstream ifs("filename"); boost::archive::text_iarchive ia(ifs); ia >> gps; for (int i = 0; i < gps.size(); ++i) { std::cout << gps[i].degrees << " : " << gps[i].minutes << " : " << gps[i].seconds << " : " << gps[i].day <<std::endl; } } return 0; } // File data that is being read $ cat filename 22 serialization::archive 4 0 0 35 59 24.566999 14 Monday_Pointer 45 69 34.567001 15 Tuesday_Pointer 1 2 3.3 13 WEDNESDAY_PTR // Output of program with while loop, don't know why eof is not being detected after reading three gps position objects ++++++++++++++++ 35 : 59 : 24.567 : Monday_Pointer **************** ++++++++++++++++ 45 : 69 : 34.567 : Tuesday_Pointer **************** ++++++++++++++++ 1 : 2 : 3.3 : WEDNESDAY_PTR **************** ++++++++++++++++ terminate called after throwing an instance of 'boost::archive::archive_exception' what(): stream error Aborted (core dumped) //Output of program with using vector terminate called after throwing an instance of 'boost::archive::archive_exception' what(): stream error Aborted (core dumped) Thanks Priyank