Salut à tous,

Quand je compile le code suivant sous Visual Studio 2005 (je n'ai pas testé avec d'autres compilos récent, mais ça compile bien avec Visual 6), ça plante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
#include <fstream>
 
std::ofstream& out = std::ofstream ();
 
void test (std::ofstream& in)
{
	out = in;
}
Voici l'erreur renvoyée :

c:\program files\microsoft visual studio 8\vc\include\ostream(581) : error C2249: 'std::basic_ios<_Elem,_Traits>::operator =' : aucun chemin accessible vers private membre déclaré(e) dans 'std::basic_ios<_Elem,_Traits>' de base virtuelle
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
c:\program files\microsoft visual studio 8\vc\include\ios(152) : voir la déclaration de 'std::basic_ios<_Elem,_Traits>::operator ='
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
Le diagnostic s'est produit dans la fonction 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator =(const std::basic_ostream<_Elem,_Traits> &)' générée par le compilateur
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
c:\program files\microsoft visual studio 8\vc\include\fstream(548) : error C2248: 'std::basic_streambuf<_Elem,_Traits>::operator =' : impossible d'accéder à private membre déclaré(e) dans la classe 'std::basic_streambuf<_Elem,_Traits>'
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
c:\program files\microsoft visual studio 8\vc\include\streambuf(23) : voir la déclaration de 'std::basic_streambuf<_Elem,_Traits>::operator ='
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
Le diagnostic s'est produit dans la fonction 'std::basic_filebuf<_Elem,_Traits> &std::basic_filebuf<_Elem,_Traits>::operator =(const std::basic_filebuf<_Elem,_Traits> &)' générée par le compilateur
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
Pourtant si je fais ça, ça marche. Vous avez une idée du pourquoi ? Merci !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
#include <fstream>
 
//std::ofstream& out = std::ofstream ();
 
void test (std::ofstream& in)
{
	std::ofstream& out = in;
}