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:
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
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; };
Ce qui me donne un fichier:
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");
Voilà, jusqu'ici, tout va bien. J'espère que vous m'avez suivi.Envoyé par monfichier.txt
Mais maintenant, je voudrais reconstruire mon vecteur de Toto. Je suis donc parti du code suivant:
Bien évidemment, cela ne compile pas car il manque l'opérateur>> qui transforme un istream en Toto:
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 ) );
l'erreur est dans l'en-tête <iterator>:Envoyé par vc8
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.
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; } [...]
Savez-vous comment faire?
Partager