The following is the code snippet that wouldn't get compiled. 

#include <iostream>
#include <fstream>
#include <map>
#include <string>

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

#include <boost/serialization/map.hpp>
#include <boost/serialization/set.hpp>
#include <boost/serialization/string.hpp>


using namespace std;

class B {
  //private attributes
  map<const string* , set<unsigned> > lines;
  
  //serialization
  friend class boost::serialization::access;

  template<class Archive> 
  void serialize (Archive & ar, const unsigned int version) {
    ar & lines;
  }


public:
  B() {}
};

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

  string fname(argv[1]);

  B b0;

  std::ofstream ofs (fname.c_str());
  boost::archive::text_oarchive oa(ofs);
  oa << b0;
  ofs.close();
  
  std::ifstream ifs(fname.c_str());
  boost::archive::text_iarchive ia(ifs);
  ia >> b0;
  ifs.close();
  
  return 0;
}



On Sep 20, 2011, at 5:02 PM, Júlio Hoffimann wrote:

Hi Kangkook,

For all stdlib classes Boost.Serialization can deal with, there is a proper header to include. Are you including all necessary ones?

Please make a test case and show us. Also, is really a const string* in your snippet?

Regards,
Júlio.

2011/9/20 Kangkook Jee <aixer77@gmail.com>
Hi, all

A member of a target class, where one STL object (map) includes another (set), prevent the code from being built properly
and the  error message urges me to implement *serialize* method for pair<string*, set<unsigned>>.

What is the typical way of implementing serialization using boost for this kind of data structures?

* Code snippet

class B {
       …
       map<const string*, set<unsigned> > lines;
       ..
         template<class Archive>
 void serialize (Archive & ar, const unsigned int version) {
       ar & lines;
       …


* Build error message

/opt/local/include/boost/serialization/access.hpp:118: error: ‘class std::map<const std::string*, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> >, std::less<const std::string*>, std::allocator<std::pair<const std::string* const, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > > > >’ has no member named ‘serialize’

Thanks for your help in advance,

/Kangkook

_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users

_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users