Warum nicht ostream<<' '<<test?



  • ofstream& operator<<(ofstream& o,test& t)
    {
    	o<<'#'<<'\0'<<t.the_name<<'\0'<<':'<<'\0'<<t.the_joke<<'\0';
    	return o;
    };
    

    Mein überladener Operator.
    Warum passiert fogendes?

    ofstream f;
    vector<test>t;
    vector<test>::iterator it;
    f.open("wasauchimmer");
    f<<' '<<*it;    //geht nicht
    f<<*it;         //geht
    

    /edit: Eigentlich versuche ich einen Vektor von Testobjekten zu speicher. Die Zeile ist aber gleich. Fehlermeldung:

    error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'std::allocator<_Ty>::value_type' akzeptiert (oder keine geeignete Konvertierung möglich)
            with
            [
                _Ty=test
            ]
            Siehe Verweis auf Instanziierung der kompilierten Funktionsvorlage 'std::ofstream &operator <<<test>(std::ofstream &,std::vector<_Ty> &)'
            with
            [
                _Ty=test
            ]
    


  • Ändere das in

    ostream& operator<<(ostream& o,test& t) 
     { 
         o<<'#'<<'\0'<<t.the_name<<'\0'<<':'<<'\0'<<t.the_joke<<'\0'; 
         return o; 
     };
    




  • Aber warum? Ich möchte in eine Datei schreiben. Es soll einen Unterscheid machen, ob ich ostream<<test oder ofstream<<test schreibe.
    @Google(): was steht da was mir hilft? Da wird beschrieben wie der Ausgabeoperator überladen wird, das kenn ich...



  • Aber warum? Ich möchte in eine Datei schreiben. Es soll einen Unterscheid machen, ob ich ostream<<test oder ofstream<<test schreibe.

    Du hast das Stream-Konzept glaube ich absolut nicht verstanden. ofstream erbt von ostream!

    Außerdem sind ofstream und ostream nur typedefs. Auf basic_ofstream/basic_ostream 🙄

    http://www.cplusplus.com/ref/iostream/



  • btw. solltest du std::ofstream::open-Aufrüfe vermeiden und lieber den Ctor dafür nehmen. Ansonsten passiert es schnell, dass du auf ungültigen Objekten arbeitest oä.

    Verschieb lieber die Deklaration.

    Du sollltest definitiv mal Effektiv C++/Exceptional C++ lesen



  • Mir ist klar das ofstream von ostream erbt. Aber kann man den nicht für eine Unterklasse spezialisieren? Mir ist auch klar das das typedefs auf basic_ostream sind. Zum btw.: Ich kann also sowas schreiben wie

    ofstream f("file.txt");
    

    ?
    Achja, ich glaub jetzt hab ichs: es gibt keinen versteckten

    ofstream& operator<<(ofstream& o,char c)
    

    Stattdessen wir der

    ostream& operator<<(ostream& o,char c)
    

    aufgerufen. Und der gibt dann ein ostream objekt zurück. Und dafür habe ich keinen Operator. Richtig so? Sollte man also nur die ostream operatoren überladen? Dann kann man zwar die ofstream-member nicht benutzen, aber das ist egal...



  • Und dafür habe ich keinen Operator. Richtig so?

    ja



  • kingruedi schrieb:

    ja

    Zählt das jetzt für alles? Schade, das ist blöd.


Anmelden zum Antworten