Objektzuweisung von ofstream zu Ostream
-
Ich möchte einem ostream zuerst einen filestream, dann cout zuweisen. Beides sind von ostream abgeleitete Klassen.
Der erstellte Code funktioniert nicht. Ich habe schon einige varianten von übergabe als pointer/referenz versucht, kam jedoch nicht weiter.
Mein Hauptproblem ist die nichtssagende Fehlermeldung.Source
// opening and closing a file #include <iostream> #include <fstream> using namespace std; int main () { ofstream outfile("test.txt"); ostream out; out=outfile; out<<"hello file"; out=cout; out<<"hello console"; outfile.close(); return 0; }Fehlermeldung
c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/ostream: In function 'int main()': c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/ostream:361:7: error: 'std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char, Traits = std::char_traits<char>]' is protected cpptest.cpp:9:11: error: within this context In file included from c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/ios:39:0, from c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/ostream:40, from c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/iostream:40, from cpptest.cpp:2: c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/bits/ios_base.h: In member function 'std::basic_ios<char>& std::basic_ios<char>::operator=(const std::basic_ios<char>&)': c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/bits/ios_base.h:788:5: error: 'std::ios_base& std::ios_base::operator=(const std::ios_base&)' is private c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/iosfwd:77:11: error: within this contextc:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/iosfwd: In member function 'std::basic_ostream<char>& std::basic_ostream<char>::operator=(const std::basic_ostream<char>&)': c:\mingw\bin\../lib/gcc/i686-pc-mingw32/4.5.0/../../../../include/c++/4.5.0/iosfwd:86:11: note: synthesized method 'std::basic_ios<char>& std::basic_ios<char>::operator=(const std::basic_ios<char>&)'first required here cpptest.cpp: In function 'int main()': cpptest.cpp:10:7: note: synthesized method 'std::basic_ostream<char>& std::basic_ostream<char>::operator=(const std::basic_ostream<char>&)' first required here
-
std::ostream ist nicht kopierbar (und das aus gutem Grund). Du müsstest mit Pointern arbeiten, um genau das zu erreichen, was du da vorhast. Nur der Sinn erschließt sich mir noch nicht.
-
batman schrieb:
Ich möchte einem ostream zuerst einen filestream, dann cout zuweisen.
.. das geht nicht
batman schrieb:
Beides sind von ostream abgeleitete Klassen.
nicht ganz, cout ist ein ostream
batman schrieb:
Der erstellte Code funktioniert nicht.
Ein Glück, es gibt Umgebungen, die das übersetzen, dann ist es noch schwerer heraus zu bekommen, warum es nicht geht.
Versuch' mal:
#include <iostream> #include <fstream> using namespace std; int main () { ofstream outfile("test.txt"); ostream out( outfile.rdbuf() ); // mit Ausgabe auf outfile initialisieren out<<"hello file"; out.rdbuf( cout.rdbuf() ); // auf Ausgabe auf cout umschalten out<<"hello console"; return 0; } // outfile.close() ist unnötig, psssiert im Destruktor von std::ofstream