int main(int argc, char *argv[])
{
my_class m;
m.load(std::ifstream("test1"));
m.save(std::ofstream("test2"));=09
}
Le compilateur me sort:
test.cpp: In function =91int main(int, char**)=92:
test.cpp:14: error: no matching function for call to =91my_class::load(std:=
:ifstream)=92
test.cpp:8: note: candidates are: void my_class::load(std::istream&)
test.cpp:15: error: no matching function for call to =91my_class::save(std:=
:ofstream)=92
test.cpp:7: note: candidates are: void my_class::save(std::ostream&) const
Je ne vois pas o=F9 le probl=E8me: ifstream (et ofstream) d=E9rive bien de =
istream (de ostream).
> int main(int argc, char *argv[]) > { > my_class m; > m.load(std::ifstream("test1")); > m.save(std::ofstream("test2")); > }
Tu ne peux pas passer un temporaire comme référence non-const. Donc :
- soit le paramètre de save devient (const ostream & ...) -- mais je doute que cela ait un sens
- soit tu déclares une variable au lieu d'utiliser un temporaire
En général, je conseillerais une variable explicite, ne serait-ce que pour pour pouvoir vérifier que l'ouverture a bien réussi avant de se servir du flux. Mais sinon, il existe toujours la possibilité d'appeler une fonction membre du flux qui renvoie une référence non-const, p.e. :
m.load( std::ifstream( "test1" ).flush() );
-- James
On Friday, July 13, 2012 2:01:37 PM UTC+1, Alain Ketterlin wrote:
> int main(int argc, char *argv[])
> {
> my_class m;
> m.load(std::ifstream("test1"));
> m.save(std::ofstream("test2"));
> }
Tu ne peux pas passer un temporaire comme référence non-const. Donc :
- soit le paramètre de save devient (const ostream & ...) -- mais je
doute que cela ait un sens
- soit tu déclares une variable au lieu d'utiliser un temporaire
En général, je conseillerais une variable explicite, ne
serait-ce que pour pour pouvoir vérifier que l'ouverture a bien
réussi avant de se servir du flux. Mais sinon, il existe
toujours la possibilité d'appeler une fonction membre du flux
qui renvoie une référence non-const, p.e. :
> int main(int argc, char *argv[]) > { > my_class m; > m.load(std::ifstream("test1")); > m.save(std::ofstream("test2")); > }
Tu ne peux pas passer un temporaire comme référence non-const. Donc :
- soit le paramètre de save devient (const ostream & ...) -- mais je doute que cela ait un sens
- soit tu déclares une variable au lieu d'utiliser un temporaire
En général, je conseillerais une variable explicite, ne serait-ce que pour pour pouvoir vérifier que l'ouverture a bien réussi avant de se servir du flux. Mais sinon, il existe toujours la possibilité d'appeler une fonction membre du flux qui renvoie une référence non-const, p.e. :