Probleme Operatorüberladung (Anfängerfrage)



  • Guten Morgen,

    ich hänge seit einiger Zeit an einem Problem bezüglich des Operatorüberladens fest. Konkret geht es um den Operator " << ", der Werte in eine selbst gebaute Liste übergeben soll (intern ist die Liste als Vector mit Spezialitäten aufgebaut).

    In der main-Funktion soll der Aufruf dann so aussehen:

    rListe << 4 << 5 << 6;
    

    wobei "rliste" ein Objekt ist, und mit dem "<<" auch verkettet beliebig viele int-Werte übergeben werden können sollen.

    Meine Idee war bisher diese:

    void operator << (Ringliste& zielliste, int element){
        zielliste.elementEintragen(element);
    }
    

    Leider funktioniert diese Implementation nur mit einem einzigen Element:

    rListe<<4
    

    Ein verketteter Aufruf wie im main-Beispiel funktioniert aber leider nicht. Fehlermeldung: invalid operands of types 'void' and 'int' to binary 'operator<<'

    Habt ihr eine Idee wo das Problem liegen könnte?

    L.G



  • Ja, versuchs mal mit so einer Signatur für den Operator:

    Ringliste& operator << (Ringliste& zielliste, int element);
    

    Dadurch ist der Ausdruck rListe << 4 vom Typ Ringliste& und der Operator greift auch beim nächsten int. So wie du es jetzt da stehen hast, ist der Ausdruck void, aber der Operator will auf der linken Seite des << einen Ausdruck haben, der an Ringliste& binden kann, daher geht das nicht.

    Edit: Achja, bevor die Frage aufkommt - der von mir vorgeschlagene Operator sollte natürlich die übergebene Zielliste zurückgeben. Du kannst dir auch mal ansehen, wie man << für std::ostream (cout und so) überlädt. Da macht man das genauso.



  • Dieser Beitrag wurde gelöscht!


  • @Finnegan Vielen Dank, jetzt läufts! Im nachhinein logisch, aber von alleine wäre ich niemals darauf gekommen


Anmelden zum Antworten