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
    

Anmelden zum Antworten