Ü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 Konvertierungen

    Ich 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? 😉


Anmelden zum Antworten