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?