Boost logo

Boost :

Subject: [boost] [serialization] "stream error" when port from boost_1.33 to boost_1.36
From: ipangth (ipangth_at_[hidden])
Date: 2008-09-25 08:53:00

I just port a project using boost_1.33_1 to use boost_1.36.
The project has a Server class using a std::set<Server> serialization,
the serialization save and load functions code see behind.

I use gcc 4.1 and run on FC6.
The porting problem is, when the old boost_1.33 generates(save) a xml file,
then use boost_1.36 load the xml throws an exception "stream error"!

the exception error code line : boost::archive::xml_iarchive ia(ifs);

How can i sovle it?

class Server
   int id;
   std::string ip;
   int port;

   static std::set<Server> lst_;

   static int dirty_;




namespace boost {
   namespace serialization {

       template <class archive>
       void serialize(archive & ar, Server & t, const unsigned int ver)
           ar & BOOST_SERIALIZATION_NVP(t.ip);
           ar & BOOST_SERIALIZATION_NVP(t.port);




int Server::save( const std::string & file)
   try {
       std::ofstream ofs(file.c_str(), std::ios::binary);
       boost::archive::xml_oarchive oa(ofs);
       oa << BOOST_SERIALIZATION_NVP(lst_);
   } catch(...) {
       return ERROR_ERROR;

   return ERROR_SUCCEED;

int Server::load(const std::string & file)
       std::set<Server> Server::lst_;
         std::ifstream ifs(file.c_str(), std::ios::binary);

           boost::archive::xml_iarchive ia(ifs);
           ia >> BOOST_SERIALIZATION_NVP(lst_);
       catch(std::exception & e)
                       std::cout << e.what() << std::endl;

       return 0;

Best regards,

Boost list run by bdawes at, gregod at, cpdaniel at, john at