Problem mit std::ofstream

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Problem mit std::ofstream

Beitrag 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?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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.
Antworten