operator+ und struct klappt nicht

  • Also ich habe jetzt eine Zeit lang C gemacht und gehe jetzt zu C++ über, und jetzt wollte ich ne Headerdatei schreiben, die nen string speichern kann und mit dem ich ganz leicht operationen ausführen kann wie zuweisung mit dem =-operator.

    Nun habe ich zuerst ne struktur gemacht (bin noch nicht bei klassen), die ein array von 100 char speichert, die zahl spielt hier eigentlich keine rolle. Als ich nun versucht habe den zuweisungsoperator zu überladen habe ich nur ne fehlermeldung bekommen:

    Code
    string operator=(string &x)

    -->'operator ={string &}' must be a nonstatic member function

    ok, dann habe ich bei google gesucht und ein beispiel gefunden, indem der =-opertator in der struktur eingebaut war, das habe ich dann mal implemetiert und das habe ich nur:

  • Hallo,
    also erstmal:
    zwischen struct uns class ist fast kein Unterschied, außer dass bei struct alles Standardmäßig für andere Funktionen und Klassen öffentlich zugänglich ist.

    Du solltest deine Klasse (struct, ich sag halt Klasse) lieber nicht String nennen, denn es existiert bereits der Bibliothekstyp std::string und Benutzer, die using namespace std;, was die Angabe von std:: überflüssig macht, angeben, könnte das verwirren.

    Auf jeden Fall sollte aus Kompatiblitätsgründen der operator= so aussehen:

    Code
    stringclass& operator=(stringclass& x)
    {
    ...
    return *this;
    }


    Ein weiteres Problem ist:
    Wenn du den Rückgabetyp jetzt als Referenz gestaltest, würdest du mit return y; eine Referenz auf ein temporäres Objekt zurückgeben, nach der Rückgabe wäre das Objekt sofort weg.
    Mit dem operator= möchtest du ja außerdem auch nicht einen neuen stringclass mit den Werten füllen, sondern du möchtest das Objekt, für das der Operator aufgerufen wird füllen, also den linken Wert beim operator=.
    Also lass dieses y vollkommen sein und setze einfach zeichen[i] = x.zeichen[i], das bezieht sich dann implizit auf das Objekt, das vor dem = steht.

    Ich schreibs am besten nochmal hin:

    Code
    stringclass& operator=(stringclass &x)
            {
            for(int i = 0; i < 100; i++)
                    {
                    if(x.zeichen[i] == 0)
                                    break;
                    zeichen[i] = x.zeichen[i];
                    }
            return *this;
            }
  • Danke für die schnelle hilfe, ich musste nur noch kleinigkeiten hinzufuegen und dann klappte es, ich musste noch den terminator hintendranschieben, dann kommen die komischen zeichen nicht mehr :)

    So sieht die Struktur jetzt aus:

    [/quote]