Seite 1 von 1

Problem mit std::ofstream

Verfasst: 28. Juli 2009 12:37
von Exasperation
Hallo zusammen!

Folgendes Problem:

Ich versuche in meinem Programm einen Ausgabestream zu definieren der in eine txt-Datei schreibt. Ich möchte den std::ofstream global verfügbar haben und leg ihn deshalb in meiner header-datei an.

Code: Alles auswählen

std::ofstream ausgabe;
Ich bekomm es nicht hin, dass ich jetzt innerhalb meines Programms diesen ofstream definieren kann...
Ich brauche ihn in einer Funktion, in der wiederum eine Funktion aufgerufen wird, die ihn auch braucht...

Code: Alles auswählen

void main_window::transl_strip()
{
	ausgabe = std::ofstream( "output.txt", std::ios::app );
	
    // ...... 
	parse_line( line, "TRANSL(", 7 ); //<--- parse_line schreibt schließlich in die Ausgabe datei
}
Bei dieser Zeile "ausgabe = std::ofstream( "output.txt", std::ios::app );" sagt er mir beim kompilieren "Kein Zugriff auf den Pfad für private Member, dessen Deklaration in der virtuellen Basisklasse "std::basic_ios<_Elem,_Traits>" erfolgte"... Wenn ich versuch innerhalb von transl_strip() den stream mit ofstream zu deklarieren, dann bleibt meine output.txt leer, weil die Funktion parse_line() natürlich nicht weiß dass sie in output.txt schreiben soll...

Kann mir da jemand weiterhelfen?

Verfasst: 28. Juli 2009 14:50
von solarix
ich habe schon ewig nichts mehr mit der STL gemacht, aber hier:

Code: Alles auswählen

ausgabe = std::ofstream( "output.txt", std::ios::app ); 
wird eine Kopie(!) verlangt, was eine schlechte Idee ist. Ein Pointer hingegen:

Code: Alles auswählen

if (!ausgabe)
    ausgabe = new std::ofstream( "output.txt", std::ios::app ); 
duerfte klappen.
[EDIT]
Oder natuerlich einfach ausgabe.open(...) aufrufen
[/EDIT]

Aber:
Ich versuche in meinem Programm einen Ausgabestream zu definieren der in eine txt-Datei schreibt. Ich möchte den std::ofstream global verfügbar haben und leg ihn deshalb in meiner header-datei an.
Ist grundsaetzlich eine extrem schlechte Idee. Verwende besser eine Singleton-Klasse (frag Google) fuer die Logfunktion in deinem Programm.