IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques Discussion :

Boost::Serialize


Sujet :

Bibliothèques

  1. #1
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut Boost::Serialize
    Bonjour,

    J'essaye d'incorporer une fonction de sauvegarde dans une de mes classes à l'aide de la librairie boost::serialize (on me l'a conseillé sur ce forum ).
    J'ai donc ajouté à ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    friend class boost::serialization::access;
        template<class Archive>
        void serialize(Archive & ar, const unsigned int version)
        {
            ar & test;
        }
        int test
    Dans mon code principal, je mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::string tempfilename = fileName + ".tmp";
            std::ofstream ofs(tempfilename.c_str());
     
            boost::archive::text_oarchive oa(ofs);
     
            oa << obj;
            ofs.close();
    et j'obtiens comme message d'erreur à la compilation:
    Error 1 error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' C:\Boost\include\boost-1_33_1\boost\archive\detail\oserializer.hpp 567
    J'arrive sur ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template<class Archive, class T>
    inline void save(Archive & ar, T &t){
        // if your program traps here, it indicates taht your doing one of the following:
        // a) serializing an object of a type marked "track_never" through a pointer.
        // b) saving an non-const object of a type not markd "track_never)
        // Either of these conditions may be an indicator of an error usage of the
        // serialization library and should be double checked.  See documentation on
        // object tracking.
        BOOST_STATIC_ASSERT(check_tracking<T>::value);
            save(ar, const_cast<const T &>(t));
    }
    dans oserializer.hpp

    Il semblerait qu'il ne sache pas comment sauvegarder ma classe!! Pourtant je lui ai rajouté le membre serialize ?
    Quel est le problème?

    Note: qd je retire ofs << obj de mon code principal, je n'ai plus aucun problème de compilation (normal, il n'essaye plus d'aller chercher serializable qu'il ne trouve certainement pas)

    Cordialement,
    Rodrigue
    Rodrigue

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    obj est de quel type ?

  3. #3
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par Miles
    obj est de quel type ?
    Je ne suis plus au bureau là donc je ne peux pas copier-coller tout le code mais il s'agit d'une "bête" classe:
    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
     
    class gObject3D
    {
    public:
      gObject3D(void); //destructeur par défaut nécessaire pour boost
    ~gObject3D(void);
     
      friend class boost::serialization::access;
        template<class Archive>
        void serialize(Archive & ar, const unsigned int version)
        {
            ar & test;
        }
     
        int test;
    };
    et ça ne fonctionne pas . Bizarre quand même... à mon avis, j'ai dû oublié qqchose.

    Cordialement,
    Rodrigue
    Rodrigue

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Remplace ton code par un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void saveObject3D(boost::archive::text_oarchive &ofs, gObject3D const &obj)
    {
      ofs<<obj;
    }
     
     
    std::string tempfilename = fileName + ".tmp";
            std::ofstream ofs(tempfilename.c_str());
     
            boost::archive::text_oarchive oa(ofs);
    saveObject3D(ofs, obj);
    ofs.close();
    Pour plus d'infos, lire http://www.boost.org/libs/serializat...nale.html#trap
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Bonjour,

    Merci pour ta réponse! J'ai lu la référence citée dans ton dernier post. Je ne suis pas certains d'avoir tout compris
    Si je voulais créer une fonction de sauvegarde dans ma classe gObject3D, comment devrais-je m'y prendre?
    Car je vois que la solution c'est de passer l'objet avec le mot clé const (track etc.), tout ce que j'ai c'est "this"...

    Merci!
    Cordialement,
    Rodrigue
    Rodrigue

  6. #6
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Je précise que j'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    void Save(std::string fileName)
    {
    std::ofstream ofs(fileName.c_str());
    boost::archive::text_oarchive oa(ofs);
    ofs << this;
    ofs.close(); 
    }
    
    mais que ça n'a pas l'air de fonctionner! Voici ce qui se trouve dans l'archive texte:
    22 serialization::archive 30012F3A4
    ça ressemble à un pointeur...
    Rodrigue

  7. #7
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Bon en essayant ta solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    void SaveObject3D(std::string fileName, gObject3D const &obj)
    {
    std::ofstream ofs(fileName.c_str());
    boost::archive::text_oarchive oa(ofs);
    ofs << obj;
    ofs.close();
    }
    
    A la compilation, il reste sur la ligne: J'ai le message d'erreur suivant:
    binary '<<': no operator found which tackes a right-hand operant of type 'const gObject3D' (or there is no acceptable conversion).
    Bon vous êtes sûr que c'est au point leur lib?
    Rodrigue

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    ça ressemble à un pointeur...
    C'est justement ce que this est, un pointeur. Si tu veux sérialiser un objet et non pas son adresse, il faut le déréférencer (*this).

    binary '<<': no operator found which tackes a right-hand operant of type 'const gObject3D' (or there is no acceptable conversion).
    Il ne faut pas envoyer ton objet sur le fichier, mais sur l'archive.

  9. #9
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Salut, merci pour ta réponse
    Je comparais justement mes sources avec celle du tuto (qui fonctionnait... bizarre quand même lol) quand j'ai reçu ton post.
    Aaaaaaaaaaaaah, je suis stupide pour l'histoire de l'archive
    Entre temps j'ai sérialisé mes objets vecteurs: Triangle3D et Point3D; est-ce que c'était nécessaire?
    J'ai testé et ça fonctionne... avec une fonction externe à ma classe mais lorsque j'essaye de faire:
    J'ai toujours l'erreur à la compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::STATIC_ASSERTION_FAILURE<x>
    car mon objet n'est pas constant... mais bon une fonction externe n'est pas si gênante que ça .. sauf s'il existe une solution simple (*this constant ).

    Mille fois Merci!
    Rodrigue

  10. #10
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Rodrigue
    Entre temps j'ai sérialisé mes objets vecteurs: Triangle3D et Point3D; est-ce que c'était nécessaire?
    Il est effectivement nécessaire de savoir sérialiser les sous objets pour sérialiser l'objet lui même.

    Citation Envoyé par Rodrigue
    J'ai testé et ça fonctionne... avec une fonction externe à ma classe mais lorsque j'essaye de faire:
    J'ai toujours l'erreur à la compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::STATIC_ASSERTION_FAILURE<x>
    car mon objet n'est pas constant... mais bon une fonction externe n'est pas si gênante que ça .. sauf s'il existe une solution simple (*this constant ).
    Dans une fonction constante, this est constant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class C
    {
      template<class Archive> voidSaveToArchive(Archive &ar) const
      { 
         ar << *this;
      }
    }
    Devrait marcher.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  11. #11
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Mille fois Merci pour toutes tes astuces et tes conseils!
    Rodrigue

  12. #12
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    C'est vrai que je ne comprends pas encore très bien le mot-clé const. Par exemple, dans mes classes je mets une fonction ToString() qui me génère ma classe sous une forme lisible dans un std::string.
    Mais lorsque je passe mon objet en const, ma méthode ToString ne fonctionne plus. J'ai dû alors faire une nouvelle fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::string ToString();
    std::string ToString() const;
    Je ne comprends pas bien non plus quand je dois le passer/renvoyer par référence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string& ToString() const;
    Je sais que, lorsque j'ai une variable qui n'est pas modifié dans une de mes fonctions, je dois faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction(const type &variable);
    mais je ne connais pas vraiment le sens général ...

    Si quelqu'un pouvait m'éclairer!
    Rodrigue

  13. #13
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Une référence pour un type de retour n'est valable qui si l'objet existe en dehors de la fonction, donc sans doute pas pour la fonction toString().

    D'ailleurs, la fonction toString est vraissemblablement constante pour l'objet quoiqu'il arrive.

    Le mot-clé const est contagieux, c'est pour ça.

  14. #14
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Merci ! J'arrête avec mes questions maintenant
    Rodrigue

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Boost::Serialize
    Salut,
    Je suis nouveau dans ce forum et je suis très ravi.
    Je viens de commencer de travailler sur un projet avec le sérialisation XML avec la librairie Boost. Je dois pouvoir réussir à réaliser un Save et un Load d'un fichier XML sous MFC(C++), j'ai commencé par créer ma classe Position qui a la forme suivante:
    Position.h
    //////////////////////
    #pragma once
    #include <boost/serialization/serialization.hpp>
    #include <boost/serialization/string.hpp>
    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>

    class CPosition
    {
    public:
    CPosition(void);
    public:
    ~CPosition(void);
    public:
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
    ar & x;
    ar & y;
    ar & z;
    ar & t;
    }
    void Save (const char* fileName,CPosition const&pos)const;
    void Load (const CPosition &pos, const char* filename);
    public:
    int x;
    int y;
    int z;
    int t;

    };
    et ensuite dans .cpp j'ai fait:

    #include "StdAfx.h"
    #include "Position.h"
    #include <boost/serialization/list.hpp>
    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>
    #include <boost/serialization/shared_ptr.hpp>
    #include <boost/serialization/serialization.hpp>
    #include <list>
    #include <afxtempl.h> // utiliser un objet de type Array
    #include <iostream>
    #include <fstream>

    #define BOOST_LIB_DIAGNOSTIC
    #define BOOST_DYN_LINK

    CPosition::CPosition(void)
    {

    }

    CPosition::~CPosition(void)
    {

    }


    void CPosition::Load(const CPosition &pos, const char* fileName)
    {
    std::ifstream ifs("fileName.xml");
    boost::archive::text_iarchive ia(ifs);
    ia >> pos;
    //std::ofstream ofs(filename);
    //boost::archive::text_oarchive oa(ofs);
    //oa << pos1;

    }
    void CPosition::Save(std::string fileName,const CPosition &pos) const
    {

    std::ofstream ofs("fileName.xml");
    boost::archive::text_oarchive oa(ofs);
    oa << pos;
    ofs.close();
    }
    Je ne sais pas si c'est juste ou non que je fais mais in me génère des erreurs en tous cas.
    Si vous pouviez m'aider ça serai très sympa de votre part parce que je suis bloqué dans mon travaille et je suis pressé par le temps.
    Merci et à très bientôt

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Boost::Serialize
    J'ai fait des modifications sur mes fonctions et voici le dernier résultat:
    Position.h
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #pragma once
    #include <boost/serialization/serialization.hpp>
    #include <boost/serialization/string.hpp>
    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>
     
    class CPosition //: public CObject
    {
    public:
    	CPosition(void);
    public:
    	~CPosition(void);
    public:
    	friend class boost::serialization::access;
        template<class Archive>
    	void serialize(Archive & ar, const unsigned int version)
    	{
    		ar << x;
    		//ar & x;
    		ar << y;
    		//ar & y;
    		ar << z;
    		//ar & z;
    		ar << t;
    		//ar & t;
    	}
    	void Save (const CPosition &pos,const char* fileName)const;
    	void Load (const CPosition &pos, const char* filename);
    public:
    	int x;
    	int y;
    	int z;
    	int t;
     
    };
    ////////////////////////////////
    Position.cpp
    #include "StdAfx.h"
    #include "Position.h"
    #include <boost/serialization/list.hpp>
    #include <boost/archive/xml_oarchive.hpp>
    #include <boost/archive/xml_iarchive.hpp>
    #include <boost/serialization/shared_ptr.hpp>
    #include <boost/serialization/serialization.hpp>
    #include <list>
    #include <afxtempl.h> // utiliser un objet de type Array
    #include <iostream>
    #include <fstream>
     
    #define BOOST_LIB_DIAGNOSTIC
    #define BOOST_DYN_LINK
     
    CPosition::CPosition(void)
    {
     
    }
     
    CPosition::~CPosition(void)
    {
     
    }
     
     
    void CPosition::Load(const CPosition &pos, const char* fileName) 
    {    
    	std::ifstream ifs(fileName);
    	boost::archive::xml_iarchive ia(ifs);
    	ia >> pos;
     
    }
    void CPosition::Save(const CPosition &pos,const char* fileName) const
    {
     
         std::ofstream ofs(fileName);
         assert(ofs.good());
         boost::archive::xml_oarchive oa(ofs);
         oa << pos;
         ofs.close();
    }
    et ce code me génère l'erreur suivante:
    error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'
    A la prochaine.

  17. #17
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Salut

    Pense à utiliser les balises [ code ] et [ quote ] pour mettre en forme tes messages, merci.

    error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'
    Ce serait bien de savoir quelle ligne de ton code génère cette erreur

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut boost::serialize
    Salut
    l'erreur générée au niveau du fichier [basic_xml_oarchive.hpp]
    et après au niveau de la ligne:
    oa << pos; avec l'erreur :
    [see reference to function template instantiation 'Archive &boost::archive::detail::interface_oarchive<Archive>::operator <<<const CPosition>(T &)' being compiled]

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Boost::serialize
    Salut,
    je vous donne les dernières modifications que j'ai fait:
    CPosition.h
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #pragma once
    #include <boost/serialization/serialization.hpp>
    #include <boost/archive/xml_oarchive.hpp>
    #include <boost/archive/xml_iarchive.hpp>
     #include <boost/serialization/version.hpp>
    #include <fstream>
     
    class CPosition
    {
    public:
    	CPosition();
    	CPosition(int newx,int newy, int newz, int newt): x(newx),y(newy),z(newz),t(newt) {}
    public:
    	~CPosition();
    public:
    	friend class boost::serialization::access;
        template<class Archive>
    	void serialize(Archive & ar, const unsigned int version)
    	{
    		if (version > 0)
    		{
    			ar & x;
    			ar & y;
    			ar & z;
    			ar & t;
    		}
    		else
    		{
    			ar & x & y & z & t;
    		}
    	}
    	void Save ( CPosition const &pos,const char* fileName)const;
    	void Load (const CPosition &pos, const char* filename);
    private:
    	int x;
    	int y;
    	int z;
    	int t;
     
    };
    BOOST_CLASS_VERSION(CPosition,1);
    et au niveau de CPosition.ccp:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include "StdAfx.h"
    #include <boost/archive/xml_oarchive.hpp>
    #include <boost/archive/xml_iarchive.hpp>
    #include <boost/serialization/serialization.hpp>
    #include <iostream>
    #include <fstream>
    #include "Position.h"
     
     
    CPosition::CPosition()
    {
    	x = 0;
    	y = 0;
    	z = 0;
    	t = 0;
    }
     
    CPosition::~CPosition()
    {
     
    }
     
     
    void CPosition::Load(const CPosition &pos, const char* fileName) 
    {    
    	std::ifstream ifs(fileName);
    	boost::archive::xml_iarchive ia(ifs);
    	ia >> pos;
    	ifs.close();
     
    }
    void CPosition::Save( CPosition const &pos,const char* fileName)const
    {
         std::ofstream ofs(fileName);
         boost::archive::xml_oarchive oa(ofs);
         oa << pos;
         ofs.close();
    }
    int main()
    {
    	const char* fileName;
    	CPosition pos1(0,10,20,30);
    	pos1.Save(pos1,fileName);
    	CPosition pos2;
    	pos2.Load(pos2,fileName);
        return 0;
    }
    et toujours il me retourne la même erreur
    error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'
    et si j'enlève oa << pos et ia >> pos il n ' y a plus d'erreur
    J'ai pas bien compris l'erreur, si vous pouvez m'aider ça se serait très cool.
    Merci.

  20. #20
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Non mais ça ne va pas de poluer mon post comme ça !

    Tu trouveras plus d'infos ici: http://forum.sources.ru/index.php?showtopic=174235

    As-tu bien configuré ton IDE? J'ai souvenir que j'avais dû ajouter des options de compilation, style WIN32_MEAN_AND_LEAN (de mémoire) dans le compilo pour que ça passe...
    Rodrigue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boost serialize xml et class template
    Par EmlTakeo dans le forum Boost
    Réponses: 1
    Dernier message: 22/08/2008, 09h27
  2. Réponses: 6
    Dernier message: 31/08/2007, 21h05
  3. Librairie boost::serialization + vector : possible ?
    Par zax-tfh dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 07/01/2006, 14h15
  4. boost::serialize
    Par Fry dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 05/11/2004, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo