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 ... 😉


Anmelden zum Antworten