Fstream Objekt an Funktion übergeben
-
Hallo,
ich möchte eine Datei öffnen und zeilenweise einlesen. Die Zeilen sollen in der Funktion get_next_line nacheinander eingelesen und in der main Funktion weiter verarbeitet werden.string get_next_line ( ifstream infile ) { string line; getline ( infile, line ); return line; } int main() { string line; string filename ( "test.txt" ); ifstream infile ( filename.c_str () ); if ( infile == NULL ) cout << "Can't open " << filename << endl; else cout << filename << " opened." << endl; line = get_next_line ( infile ); // Fehler? return 0; }Die Fehlermeldung lautet:
error C2248: "std::basic_ios<_Elem,_Traits>::basic_ios": Kein Zugriff auf private Member, dessen Deklaration in der std::basic_ios<_Elem,_Traits>-Klasse erfolgte.
Ich vermute der Fehler liegt in Zeile 18, denn wenn ich die Zeile auskommentiere, dann läuft das Programm durch.
Warum ist das falsch?
-
übergib den stream per referenz, nicht per Kopie.
-
Wow, schnelle Antwort!

Stimmt, so geht es:
string get_next_line ( ifstream& infile );Warum muss das per Referenz sein?

-
einles0r schrieb:
Wow, schnelle Antwort!

Stimmt, so geht es:
string get_next_line ( ifstream& infile );Warum muss das per Referenz sein?

weil streams nicht kopierbar sind
-
Ok, thanks!
-
programmiertechnisch wird erreicht indem man den copy constructor auf private oder protected setzt
-
Skym0sh0 schrieb:
programmiertechnisch wird erreicht indem man den copy constructor auf private oder protected setzt
Ist das alles? Klingt ja einfach ...
