Standartausgabe cout, ich möchte cout lesen in c hab ich einfach



  • Guten Tag,

    ich habe ein kleines Problem, habe eine Ausgabe, die ich einmal am Bildschirm haben möchte, also std::cout << ... und einmal in eine Datei schreiben muß.

    outf(filename.c_str(), std::ios_base::out | std::ios_base::app);
    230
    231 if(outf)

    ist im Prinzip kein wirklich großes Problem mehrere Methoden mit gleichem Inhalt zu schreiben, aber ich würde doch lieber den "Zeiger" auf das Objekt mitgeben in dem die Ausgabe geschehen soll und das dann mit der gleichen Funktion bearbeiten lassen....

    fstream(std::cout) haut nicht hin, krieg ich folgende fehlermeldung:

    probieren.cc -o soso
    In file included from /usr/include/c++/4.4/ios:39,
    from /usr/include/c++/4.4/ostream:40,
    from /usr/include/c++/4.4/iostream:40,
    from probieren.cc:1:
    /usr/include/c++/4.4/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
    /usr/include/c++/4.4/bits/ios_base.h:790: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
    /usr/include/c++/4.4/iosfwd:47: error: within this context
    /usr/include/c++/4.4/iosfwd: In copy constructor ‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’:
    /usr/include/c++/4.4/iosfwd:56: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here
    probieren.cc: In function ‘int main()’:
    probieren.cc:8: note: synthesized method ‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’ first required here

    Jetzt meine Frage, gibts irgendeine Möglich keit den filestream auf cout bzw. cout auf einen filestream zu legen oder muß ich dafür einfach die C-Funktionen benutzen und den Zeiger für stdout und FILE* benutzen???
    vielen dank
    ks



  • Hallo,

    ich benutze in einem meiner Programme

    std::ostream& out = (filename != "-")
    			? *(new std::ofstream(filename.c_str()))
    			: std::cout;
    

    Wenn der filename ein Minus ist, dann schreibe ich auf cout, ansonsten öffne ich die Datei.

    Gruß,
    MJM



  • Ich schreib in VC++
    unf schreibe immer so meine Dateien:

    #include <iostream>
    using namespace std;

    int main() {
    cout<<"Der Text den man eben haben will"<<endl;
    }



  • void Write(std::ostream& os, const zeug& meinzeugs)
    {
      os << meinzeugs.a() << meinzeugs.b() ...;
    }
    
    void f()
    {
      zeug z;
      //...
      Write(std::cout, z);
    
      fstream ifs("file");
      Write(ifs, z);
    }
    

    War das tatsächlich die Fräge?
    Man könnte auch ein template<typename Stream> Write(Stram& s, ...) um in alles was ein << Operator unterstützt zu schreiben.


Anmelden zum Antworten