2 Stimmen

Problem mit binary ==

Ich bin auf ein seltsames Problem mit dem binären operator== gestoßen.
Ich habe eine Funktion, die zurückgibt: Type* get();, T ist vom Typ enum Colors {Rot,Schwarz} und ich habe einen operator== definiert als:

bool operator==(Type* links, Colors rechts)
{
//...
}

Jetzt habe ich im Code folgende Zeile:

if (get() == Rot)
{
//
}

aber hier erhalte ich einen Fehler, der besagt:

Fehler C2679: binäres '==' : Es wurde kein Operator gefunden, der einen rechten Operanden vom Typ 'Colors' akzeptiert (oder es gibt keine akzeptable Konvertierung)
1>          könnte 'eingebauter C++ operator==(Node *, Node *)' sein
1>          mit
1>          [
1>              Key_T=int,
1>              Value_T=int
1>          ]

oder       'bool operator ==(const Type *,const Colors)'
1>          mit
1>          [
1>              T=Colors
1>          ]
1>          beim Versuch, die Argumentliste '(Node *, Colors)' anzupassen
1>          mit
1>          [
1>              Key_T=int,
1>              Value_T=int
1>          ]

Offensichtlich ist die zweite Übereinstimmung das, was ich verwenden wollte, und es ist eine perfekte Übereinstimmung, aber es will trotzdem nicht kompilieren. Was mache ich falsch?

2voto

Tony Delroy Punkte 98528

(Dies ist eher diagnostisch als eine direkte Antwort... aber zu viel für einen Kommentar.)

Funktioniert für mich mit GGC 4.5.2:

enum Farbe { Rot, Schwarz };

template 
struct Typ { };

bool operator==(Typ*, Farbe) { return true; }

int main()
{
    Typ* p;
    return p == Schwarz;
}

Bitte versuchen Sie das obige auf Ihrem Compiler und posten Sie die Fehlermeldung, falls vorhanden. Wenn keine vorhanden ist, posten Sie bitte Ihr GENAUES vollständiges Programm, da der Fehler wahrscheinlich irgendetwas Subtiles ist, das Sie nicht gepostet haben.

0voto

BenjaminB Punkte 1729

Modifiziert die Funktion operator== weder links noch rechts?

Fügen Sie also const hinzu und es wird funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X