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

SL & STL C++ Discussion :

[STL] fichier et vecteur II


Sujet :

SL & STL C++

  1. #1
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut [STL] fichier et vecteur II
    Rebonjour,

    alors voilà, j'essaie de bien comprendre certains aspects de la STL, et ce n'est pas toujours évident.

    J'essaie de faire la chose suivante:
    J'ai une struct(ou classe, comme vous voulez) Toto:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Toto
    {
    	Toto(int a = 0, int b = 0, std::string s = ""):i1(a),i2(b),str(s){}
    	int i1, i2;
    	std::string str;
    };
    Ensuite, j'ai un vecteur d'instances de Toto que je sauvegarde dans un fichier texte. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<Toto> v;
    v.push_back(Toto t1(1, 2, "toto1"));
    v.push_back(Toto t2(3, 4, "toto2"));
    sauvegarde(v, "monfichier.txt");
    Ce qui me donne un fichier:
    Citation Envoyé par monfichier.txt
    1 2 toto1
    3 4 toto2
    Voilà, jusqu'ici, tout va bien. J'espère que vous m'avez suivi.

    Mais maintenant, je voudrais reconstruire mon vecteur de Toto. Je suis donc parti du code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ifstream f;
    f.open("monfichier.txt");
     
    vector<Toto> v;
    copy( istream_iterator<Toto>( f ),
    	istream_iterator<Toto>(),
    	back_inserter( v ) );
    Bien évidemment, cela ne compile pas car il manque l'opérateur>> qui transforme un istream en Toto:
    Citation Envoyé par vc8
    error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'Toto' (or there is no acceptable conversion)
    l'erreur est dans l'en-tête <iterator>:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template<class _Container>
    	class back_insert_iterator
    		: public _Outit
    {
    [...]
    void _Getval()
    	{	// get a _Ty value if possible
    	if (_Myistr != 0 && !(*_Myistr >> _Myval))  // <-- l'erreur est ici
    		_Myistr = 0;
    	}
    [...]
    J'ai donc tenté de définir l'opérateur>> pour ma classe Toto, mais je n'y parviens pas. Il doit y avoir une subtilité avec les istream qui m'échappe.

    Savez-vous comment faire?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Par défaut
    Tu peux toujours essayer de réécrire la fonction copy() que tu utilises.
    Il s'agit d'une boucle de lecture de fichier, tu lis toutes les lignes et tu insère un nouvel objet Toto pour chaque ligne lu (sachant qu'une ligne est deux entier et une string).

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Surcharger l'opérateur >> n'est pas très compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::istream& operator>>(std::istream& src, Toto& dst)
    {
        src >> dst.i1;
        // ...
        return src;
    }

Discussions similaires

  1. [Débutante] Pb Eclipse + accès fichier + de vecteurs
    Par kenza28684 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 07/11/2009, 09h48
  2. Lire un fichier de vecteur serialisé
    Par alexorcet dans le forum Général Java
    Réponses: 8
    Dernier message: 21/05/2008, 14h12
  3. [STL] fichier et vecteur
    Par r0d dans le forum SL & STL
    Réponses: 3
    Dernier message: 29/06/2007, 23h27
  4. [STL] Manipuler des vecteurs de vecteur
    Par FabaCoeur dans le forum SL & STL
    Réponses: 6
    Dernier message: 28/04/2007, 20h09
  5. Réponses: 2
    Dernier message: 04/04/2007, 10h34

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