[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:
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:
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:
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:
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?