Bonjour !

Je m'occupe de sérialisation ces derniers temps, et alors qu'il me semblait avoir lu que std::list était sérialisable, je me suis surpris a avoir des problèmes de compilations en essayant.

Voici le code de la classe concernée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
class				Container
  {
  public:
    Container(void)
    {
      _type = 0;
    }
 
    void			add(const std::string& str1, const std::string &str2, char code)
    {
      _str1.push_back(str1);
      _str2.push_back(str2);
      _code.push_back(code);
    }
 
    void			serialize(boost::archive::text_iarchive& ar, unsigned int version)
    {
      ar & _type & _contacts & _ips & _status;
    }
 
    void			serialize(boost::archive::text_oarchive& ar, unsigned int version)
    {
      ar & _str1 & _str2 & _code;
    }
 
  private:
    std::list<std::string>	_str1;
    std::list<std::string>	_str2;
    std::list<char>	_code;
  };
Je sais qu'on sérialise plutôt avec une méthode template, mais j'ai eu besoin de faire autrement (des questions d'héritages).

Je me retrouve avec ces erreurs à la compilation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
/usr/include/boost/serialization/access.hpp:118: error: ‘class std::list<char, std::allocator<char> >’ has no member named ‘serialize’
/usr/include/boost/serialization/access.hpp: In static member function ‘static void boost::serialization::access::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive, T = std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >]’:
/usr/include/boost/serialization/serialization.hpp:74:   instantiated from ‘void boost::serialization::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive, T = std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >]’
/usr/include/boost/serialization/serialization.hpp:133:   instantiated from ‘void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::text_oarchive, T = std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >]’
/usr/include/boost/archive/detail/oserializer.hpp:148:   instantiated from ‘void boost::archive::detail::oserializer<Archive, T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*) const [with Archive = boost::archive::text_oarchive, T = std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >]’
main.cpp:20:   instantiated from here
/usr/include/boost/serialization/access.hpp:118: error: ‘class std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >’ has no member named ‘serialize’
Je suppose que c'est normal, mais qu'est-ce qui peut bien manquer ?

Merci de votre aide !