Warum kann ich keinen Verweis auf "ofstream" / "ifstream" mit einer Instanz von "fstream" initialisieren?
void read_foo (std::ifstream& out);
void write_foo (std::ofstream& out);
Ich habe diese beiden Funktionen, bei denen einer aus einer Datei lesen und der andere in eine Datei schreiben soll.
Alles funktioniert mit den folgenden Ausschnitten.
std::ifstream ifs ("filename.txt");
read_foo (ifs);
std::ofstream ofs ("filename.txt");
write_foo (ofs);
DAS PROBLEMWenn ich jedoch versuche, einenstd::fstream
, damit ich beide Funktionen mit demselben Stream aufrufen kann, er nicht kompiliert und der Compiler viele Fehlermeldungen ausgibt.
fstream
zu einemifstream&
, oderofstream&
?foo.cpp#include <fstream>
void read_foo (std::ifstream& out);
void write_foo (std::ofstream& out);
int main () {
std::fstream fs ("filename.txt");
read_foo (fs);
write_foo (fs);
}
Fehler:<br>foo.cpp: In function ‘int main()’:<br>foo.cpp:9:16: error: invalid initialization of reference of type ‘std::ifstream& {aka std::basic_ifstream<char>&}’ from expression of type ‘std::fstream {aka std::basic_fstream<char>}’ read_foo (fs);<br>^<br>foo.cpp:3:7: note: in passing argument 1 of ‘void read_foo(std::ifstream&)’ void read_foo (std::ifstream& out);
<br>foo.cpp:10:16: error: invalid initialization of reference of type ‘std::ofstream& {aka std::basic_ofstream<char>&}’ from expression of type ‘std::fstream {aka std::basic_fstream<char>}’<br>write_foo (fs);<br>^<br>foo.cpp:4:6: note: in passing argument 1 of ‘void write_foo(std::ofstream&)’ void write_foo (std::ofstream& out);