eigene STRING Klasse, operator + überladen
-
Hallo,
ich habe eine eigene STRING Klasse geschrieben. Funktioniert auch nahezu problemlos. Den Operator + habe ich wie folgt 2x überladen
friend STRING operator + (const STRING&, const STRING&);
STRING operator + (const char*) const;Zwei Probleme ergeben sich damit:
1. Error:
STRING s = "s" + "s";
error: invalid operands of types ‘const char [2]’ and ‘const char [2]’ to binary 'operator+'2. Warning:
STRING = 'c' + 'c';
warning: overflow in implicit constant conversion
Und das Ergebnis ist auch Quatsch. Anscheinend definiert er die char* als int.Wenn ich den ersten Term rechts vom Gleichheitszeichen mit STRING(...) umwandele, klappt es in beiden Fällen problemlos.
Muß ich den operator + noch irgendwie weiter überladen?
Vielen Dank!
Oliver
-
oliver67 schrieb:
Hallo,
ich habe eine eigene STRING Klasse geschrieben. Funktioniert auch nahezu problemlos. Den Operator + habe ich wie folgt 2x überladen
friend STRING operator + (const STRING&, const STRING&);
STRING operator + (const char*) const;Zwei Probleme ergeben sich damit:
1. Error:
STRING s = "s" + "s";
error: invalid operands of types ‘const char [2]’ and ‘const char [2]’ to binary 'operator+'Der Compiler kennt dein STRING nicht. Ganz einfach. Woher auch?
Er kann nicht riechen, dass Du das nach STRING konvertiert haben willst.
Lösung:STRING s = STRING("s") + STRING("s");oliver67 schrieb:
2. Warning:
STRING = 'c' + 'c';
warning: overflow in implicit constant conversion
Und das Ergebnis ist auch Quatsch. Anscheinend definiert er die char* als int.Nein, das ist kein quatsch. 'c' wird als char interpretiert und das ist ein Zeichen welches durch eine Zahl repräsentiert wird. Hoffe hab das richtig erklärt, aber jedes Zeichen stellt auch eine Zahl dar, einfach gesagt.
rya.
-
Hallo,
danke für den Hinweis.
Wie geschrieben war mir schon klar, dass ich mit ... = STRING("...") dass Problem beheben kann.
Nur dachte/hoffte ich, dass z.B. durch ein zusätzliches Überladen der Compiler selbständig erkennt (anhand der STRING Variable links vom Gleichheitszeichen), dass eine STRING Variable dargestellt werden soll.Gruß
Oliver
-
oliver67 schrieb:
Nur dachte/hoffte ich, dass z.B. durch ein zusätzliches Überladen der Compiler selbständig erkennt (anhand der STRING Variable links vom Gleichheitszeichen), dass eine STRING Variable dargestellt werden soll.
Rückgabetypen gehen in C++ nie in die Auflösung eines Funktionsaufrufes ein.
Für das was du willst müsstest du einen Operator + für const char[] definieren. Darf man aber nicht, weil bei Operatorüberladung immer mindestens ein selbsterstellter Typ vorkommen muss.
-
Nochmals vielen Dank für Eure Hilfe!
Gruß
Oliver