operator+
-
Hi,
ich möchte folgendes aufrufen:
DT_String u, v = "Hallo", w = "Welt!"; u = v + w;// Zuweisungs-Operatoren public: DT_String& operator=(const char* apsString); DT_String& operator=(DT_String& apcString); DT_String& operator=(long alValue); // Addition-Operator public: DT_String operator+(const char* apsString); DT_String operator+(DT_String& apcString); DT_String operator+(long alValue);Bekomme aber folgende Fehlermeldung:
error C2593: 'operator =' is ambiguous, could be 'DT_String &DT_String::operator =(long)' or 'DT_String &DT_String::operator =(const char *)' ..
while trying to match the argument list '(DT_String, DT_String)'Was mache ich hier falsch?

-
Hast du eventuell einen DT_String::operator long() definiert (explizite Typumwandlung)? Ansonsten könntest du auch versuchen, den Parameter von operator+ und operator= als "const DT_String&" zu deklarieren - außer du hast wirklich vor, deinen Parameter zu verändern.
(achja: In welcher Zeile tritt denn der Fehler auf?)
*etwas länger hinsieht* operator=(DT_String& kann nicht angewendet werden, weil der Compiler keine nicht-konstante Referenz an eine temporäre Variable binden kann (und der Rückgabewert von op+ ist eine temporäre Variable, selbst wenn die rausoptimiert werden kann).
-
Hast du eventuell einen DT_String::operator long() definiert (explizite Typumwandlung)?
Ja, hab ich. Wenn ich's raushaue, dann funktioniert's.
Merci
-
Beste Lösung dürfte tatsächlich sein, die "internen" Operatoren mit konstanten Strings zu definieren:
DT_String& operator=(const DT_String& other); DT_String operator+(const DT_String& other) const;Der nichtkonstante Zuweisungsoperator kann in deinem Beispiel nicht angewendet werden, weil der Compiler davon ausgehen muß, daß du den Parameter ändern willst - und den Rückgabewert von op+ kannst du nicht ändern (bzw. hat das keine Auswirkungen, da das Objekt sich sofort nach der Zuweisung selbst vernichtet). Also sucht der Compiler nach "Umwegen" - einer führt über eine char*-Konvertierung zu op=(const char*), der andere über eine long-Konvertierung zu op=(long) - da beide Wege gleich gut sind, steht er vor einer Patt-Situation.