Überladungen von Operatoren
-
Hallo,
ich hab das Problem, dass ich von den nativen Datentypen abstrahieren muss und mich dazu entschieden dass über Klassen zu machen.
Dummerweise habe ich mit der Überladung der Operatoren ein Problem.
Ich hab folgende Klasse für unsigned int definiert:
class UnsignedInt { public: UnsignedInt(void); UnsignedInt(const unsigned int value); UnsignedInt& operator = (unsigned int value); UnsignedInt& operator = (UnsignedInt &var); ... bool operator == (UnsignedInt var) const; ... // cast operatoren operator unsigned int() const; operator Integer() const; operator Float() const; operator UnsignedInt() const; operator Short() const; operator UnsignedShort() const; operator Long() const; operator UnsignedLong() const; operator Double() const; operator LongDouble() const; operator Char() const; operator UnsignedChar() const; private: unsigned int value; friend std::ostream& operator << (std::ostream &os, const UnsignedInt &var); friend std::istream& operator >> (std::istream &is, UnsignedInt &var); };Das Problem ist jetzt, dass wenn ich im Code sowas habe
UnsignedInt ui = 5;
...
if (ui == 5)
{...}
...Dann bekomm ich die Complier-Meldung
error C2666: 'UnsignedInt::operator`=='': 2 Überladungen haben ähnliche KonvertierungenIch hab allerdings nur einen == Oprator definiert.

Die einfachste Lösung für das Problem ist sicherlich ein
if (ui == (UnsignedInt) 5)
aber es muss doch auch möglich sein, das anders zu lösen.Hat einer eine Idee wie ich das hinbekommen kann?
Danke
-
Ich denke das Problem ist der implizite Operator==, dessen Signatur
bool operator==(const Type& obj) const;ist. Demnach hat deine Klasse einen impliziten operator==(const UnsignedInt&) und einen expliziten operator==(UnsignedInt).
-
LordJaxom schrieb:
Ich denke das Problem ist der implizite Operator==, dessen Signatur
bool operator==(const Type& obj) const;ist. Demnach hat deine Klasse einen impliziten operator==(const UnsignedInt&) und einen expliziten operator==(UnsignedInt).
Eine Klasse, die implizit einen op== generiert? Mein Compiler macht das nicht...
@ADOOM: Der Fehler liegt darin, dass der Compiler sich bei dem Konstrukt
if (ui == 5)nicht entscheiden soll, ob er
operator unsigned int() const;für ui oder
UnsignedInt(const unsigned int value);für 5 aufrufen soll.
Gruß Caipi
-
Danke Caipi
werd dann hier mal ansetzen und schauen ob ich das so hinbekomme wie ich es mir vorstelle.
-
LordJaxom schrieb:
Ich denke das Problem ist der implizite Operator==
Es gibt keinen impliziten op== in einer selbstdefinierten Klasse.
@ADOOM
Einen operator UnsignedInt in der Klasse UnsignedInt? Glaubst du nicht, dass das ein bisschen sinnlos ist?