ofstream=std::cout - warum nicht möglich?
-
Hallo,
ich möchte gerne (version mit wide w)wostream outStream; outStream=std::wcout;outStream kann entweder ein file sein oder eben stdout, stderr, etc.
std::wcout ist ein wostream.
Trotzdem erhalte ich eine Fehlermeldung:Error 2 error C2249: 'std::basic_ios<_Elem,_Traits>::operator =' : no accessible path to private member declared in virtual base 'std::basic_ios<_Elem,_Traits>' c:\program files\microsoft visual studio 8\vc\include\ostream 581
was mach ich denn falsch?
danke
alex
-
du kannst streams nicht kopieren (was du hier versuchst). Mit referenz gehts, die kannst du abr auch nur einmal zuweisen. Mit Zeiger gehts auch, dann ist die Syntax aber nicht mehr so schön:
std::wostream& w = std::wcout; std::wostream* w2 = &std::wcout; w << "hallo" << endl; (*w2) << "hallo" << endl;
-
hallo,
das war ein kopierfeherler.
im original code habe ich eine referenz, da ich den stream als referenz in die methode durchreiche. funktioniert, wie du richtig schreibst aber nicht, weil es nicht die erste zuweisung ist. schade.mit pointern funktionierts.
ich frage mich nun was der unterschied zwischen wostrem (e.g. wcout) und ofstream (meine übliche wahl) ist...
gruß
alex
-
AbsoluteBeginner_ schrieb:
das war ein kopierfeherler.
Seit wann gibts Kopierfehler? Du meinst wohl Abschreibfehler.

AbsoluteBeginner_ schrieb:
ich frage mich nun was der unterschied zwischen wostrem (e.g. wcout) und ofstream (meine übliche wahl) ist...
Die einen arbeiten mit
char, die anderen mitwchar_tund unterstützen damit grössere Zeichensätze als 256.
-
AbsoluteBeginner_ schrieb:
im original code habe ich eine referenz, da ich den stream als referenz in die methode durchreiche. funktioniert, wie du richtig schreibst aber nicht, weil es nicht die erste zuweisung ist. schade.
mit pointern funktionierts.
Es funktioniert auch mit Referenzen!
-
Ich harbeite nun mit pointer referenzen (reiche den pointer durch)
void connectStreamp(wstring FilePath, wofstream* & pFileStream,wostream* &outStream);und kann nun entwder wcout, wcerr oder eben ein file referenzieren.
if(filePath==L"stdout"){ outStream=&std::wcout; }//stdout else if(filePath==L"stderr"){ outStream=&std::wcerr; }//stderr else{ //connect file stream pFileStream=new wofstream (filePath.c_str()); //init the pointer target wfilebuf dummybuf; outStream=new wostream(&dummybuf); //Replace outStream's buffer by file buffer outStream->rdbuf(pFileStream->rdbuf()); }//filesso speichere ich z.B. pStreamDebug (als wostream
und kann
über(*pStreamDebug)<<...in das 'gewählet ziel' schreiben.
danke für die hilfe alex