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:
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: