Operator << überladen;



  • Ich muss den Operator << überladen. Es funktioniert alles jedoch sollte cerr << Objekt << "\n\n"; eben nichts ausgeben oder eben eventuell die "\n\n", jedoch wird bei mir ebenfalls das Objekt ausgegeben;

    So schaut das bei mir aus:

    friend ostream& operator<<(ostream&, const Deck&);
    
    ostream& operator<<(ostream& os, const Deck& rop){
    
    	os << '[' << rop.besitzer << " { ";
    
    	for (size_t i = 0; i < rop.liste.size(); i++){
    		os << rop.liste.at(i);
    		if( i != rop.liste.size()-1) os << ", ";
    	}
    
    	os << "}" << "]";
    
    	return os;
    }
    

    Ich hoffe mir kann jemand weiterhelden



  • Wieso schreibst du nen Stream-Insertion-Operator, wenn du nix ausgeben willst? Darfuque?



  • In meiner Aufgabenstellung musste ich auch etwas mit cout << ausgeben 🙂 hat alles super funktioniert bis zum cerr <<



  • Dann lösch die "cerr <<" Zeile halt weg ...?



  • Ich helde dir gleich eine.



  • Wenn ich das dürfte würde ich es machen ich muss das aber stehen lassen, da ich ein Hauptprogramm vorgegeben habe und die klassen dazu implementieren muss..



  • Kannst du mal die Aufgabenstellung posten?

    Kann mir nämlich grad überhaupt nicht vorstellen dass die Aufgabe so beknackt formuliert ist, dass einem nix anderes übrig bleibt als nen Stream-Insertion-Operator zu schreiben der sich mit std::cerr anders verhält als mit anderen Streams. Wäre natürlich leicht umzusetzen, aber ich will einfach nicht glauben dass das gefragt/gewünscht ist. Das wäre zu bekloppt.



  • newprogrammer1996 schrieb:

    Wenn ich das dürfte würde ich es machen ich muss das aber stehen lassen, da ich ein Hauptprogramm vorgegeben habe und die klassen dazu implementieren muss..

    Da hast du dann halt das vorgegebene falsch verstanden.
    Alles andere wäre fatal falsch.



  • Ja kann ich ich hab hier das ganze Programm: https://www.dropbox.com/sh/q37jrid5cpx8drr/AAD84Muqv40t1MNaCgYlstwPa?dl=0
    ich muss das Programm so schreiben dass eine gewünschte Ausgabe vorhanden ist. Das main-Programm wird vorgeschrieben. Jedoch wird bei der gewünschten Ausgabe mein Objekt 2 mal ausgegeben obwohl es nur einmal machen sollte. Möglicherweise liegt es an einer exception, ich weiß es aber leider nicht 😕



  • Auch wenn ich dropbox für sowas hasse, hab ich doch mal kurz reingeguckt:

    - formatiere deinen Code anständig. Nimm clang-format oder irgendeinen anderen Formatierer oder mach es selbst. Aber nicht so eine Kaut+Rüben-Einrückung verwendne!

    - in .h-Dateien hat ein "using namespace" nichts verloren

    - in deinem main steht:

    const Deck d{"Maria", karten};
    cout << d << '\n';
    cerr << d << "\n\n";
    

    Du gibst also einmal das Deck auf STDOUT und einmal auf STDERR aus. Wenn beides der Bildschirm ist, also 2x auf dem Bildschirm. Das gehört so.

    In deiner Ursprungsfrage schriebst du:

    Es funktioniert alles jedoch sollte cerr << Objekt << "\n\n"; eben nichts ausgeben oder eben eventuell die "\n\n"

    Dazu: "eventuell" hat in einer Beschreibung, wie etwas sein soll, nichts verloren. Aber normales Verhalten ist, dass (solange der Stream nicht im Fehlerzustand ist) alles, was mit << reinkommt, rausgeschrieben wird. Wäre auch blöd, wenn das anders wäre.


Log in to reply