Operator overloading <<



  • Hallo.

    Ich hab ne Frage (ach was *gg*) Ich soll mit c++ eine Klasse String implementieren, die unter anderem due Funktion bieten soll, dass man den String per cout ausgeben kann. Ich muss also cen <<-Operator überladen. Soweit so gut, ich hab mich ein bisschen schlau gemacht und auch irgendwann ne Lösung gefunden, die so aussieht:

    ostream& operator<<(ostream& oStream,String& str){
    	oStream<<str.getWord()<<endl;
    	return oStream;
    };
    

    Nun zu meinen Fragen:
    1, <iostream> kann ich nicht inkludieren (an die 20 Fehlermeldungen)
    aber <iostream.h> geht, is ja aber nicht unbedingt c++, was kann ich machen?
    2, Selbst wenn ich <iostream.h> inkludier (in der .cpp und in der .h), aber in der Main trotzdem die <iostream> inkludier
    is klar, dass er da meckert, weils cout dann ja öfter gibt. Ich brauch aber das "originale" cout auch.

    Kann mir jemand helfen?

    MfG,
    Sandra



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Du brauchst <ostream>.

    std::ostream& operator<<(std::ostream& oStream,String& str){
    	oStream<<str.getWord()<<std::endl;
    	return oStream;
    }
    

    Es wäre wohl auch noch gut, den String als Referenz auf const zu übergeben.



  • Du hast den falschen Header mitgenommen. In der <iostream> sind "nur" cin, cout und Kollegen, die nötigen Definitionen für deine Aufgabe findest du in der <ostream>.

    (PS: Und <iostream**.h**> ist eine Prä-Standard-Version der <iostream>, die solltest du sowieso nicht zusammen mit <iostream> verwenden)



  • und natürlich:

    using namespace std; //wenn du <iostream> verwendest
    //oder einzelne usings
    using std::cout;
    using std::cin;
    //oder jedesmal im code
    std::cout<<"hallo"<<std::endl; //usw...
    


  • Danke für die Hilfe.

    Den Namespace hab ich natürlich angegeben, nur nicht mit rauskopiert.

    Ich hab nun <ostream> inkludiert, aber nun sagt mir der Compiler, dass ostream ein mehrdeutiges Symbol ist. Woher kommt die Mehrdeutigkeit? Ist ja nur <ostream> inkludiert, wo soll denn dann eine 2. Definition sein? Ich benutz den Namen natürlich auch sonst nirgends 😉

    Sandra



  • Hast du irgendwo noch einen Standardheader mit .h drin?



  • Mit .h nur meine eigne Headerfile... aber sonst nix



  • Hey, ich habs endlich geschafft. Nun funktionert mein <<-Operator 🙂

    Danke nochmal für eure Hilfe.

    Lag einfach daran, dass sich der <<-Operator keine file mit andren Funktionen teilen wollte... nu hat er seine eigne und is zufrieden 🙂

    Sandra


Anmelden zum Antworten