Salut,
Alors voila, dans le cadre d'une petite appli (pour m'auto former on va dire), je cherche à importer des données texte dans un objet puis serialiser le tout en fichier binaire.
Le truc c'est que mes données sont nombreuses et doivent etre stockées dans un tableau.
Voici grosso modo comment ca se passe :
J'ai une structure Vertex composée de 3 floats X,Y et Z.
une deuxieme structure Faces composées de 3 int A,B et C.
J'ai une classe objet3d qui comporte deux Vectors : tabVertex et tabFaces.
Quand je lis mon fichier pour recuperer mes infos, je créé plusieurs nouveaux vertex et faces que je stocke dans les tableaux dynamiquement (on ne connait pas à l'avance le nombre de chaque).
Une fois l'objet rempli, je souhaite le serialiser.
J'ai donc implementé le code necessaire de la librairie boost pour pouvoir le faire.
J'ai donc donné mes deux tableaux comme etant serialisables.
Donc, sans donner l'ordre de serialiser, la compile et l'execution passent bien. Preuve que le code ci dessous est correct :
Maintenant, lorsque je donne l'ordre de serialiser avec ce code ci :
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 class objet3d { friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & tabVertex; ar & tabFaces; } private: vector<Vertex> tabVertex; vector<Face> tabFaces; public: void objet3d::addVertex(string X, string Y, string Z); void objet3d::addFace(string A, string B, string C); void objet3d::afficheVertex(void); void objet3d::afficheFaces(void); };
Sachant que modele est donc mon objet créé et rempli, ehhh bien paf le chien comme dirait l'autre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ofstream streamfic("toto.tes"); text_oarchive outobjet(streamfic); outobjet << modele;
Une des erreurs :
Error : Class std::Vector<Face, std::Allocator <FACE> >'has no member named 'serialize'
Alors bon, je me suis dit que c'etait peut etre les structures qui posaient probleme. Je les ai donc transformées en objet tout en leur ajoutant la methode serialize pour que boost retrouve ses petits.
Mais apparement ce serait Vector qui poserait probleme. Je suppose que le fait qu'il n'y ait pas la methode serialize dans sa definition de classe joue sur la compilation
Quelqu'un saurait-il par hasard s'il y a moyen de contourner ce probleme ?
Merci d'avance
@++
Partager