2017-02-21 4 views
-3
struct Point 
{ 
    int x; 
    int y; 

    Point() { x = NULL; y = NULL; } 
    Point(int x1, int y1) { x = x1;  y = y1; } 

    ~Point(void) { } 


    Point & operator= (const Point &p) 
    { 
     x = p.x; y = p.y; return (*this); 
    } 

    bool operator== (const Point &p) 
    { 
     return ((x == p.x) && (y == p.y)); 
    } 

    bool operator!= (const Point &p) 
    { 
     return ((x != p.x) || (y != p.y)); 
    } 
} 

oben Code für meine Variablentyp Punktungültig Bauer und -betreiber

hier Nachfolgend finden Sie Kurzcode meines cpp

Point Finish = ladyrinth->getEndLocation(); // This is to get the coordinate of end location 
bool up = true; 
bool down = true; 
bool left = true; 
bool right = true; 

if (up == Finish) 
     DirectionMove = 0; 
    if (down == Finish) 
     DirectionMove = 1; 
    if (left == Finish) 
     DirectionMove = 2; 
    if (right == Finish) 
     DirectionMove = 3; 

der Fehlercode ist kein Operator "==" match Operanden, Operanden sind bool zu Punkt , aber nachdem ich versuche, den Betreiber sagen sie keinen Konstruktor, den ich nicht wissen, wie man macht. Bitte hilf mir.

+1

hoch/runter ... ist 'bool', aber der '==' Operator, den Sie überladen haben, benötigt 'Point' auf beiden Seiten. –

+0

@JohnZeng ich den Punkt Operator == Punktoperator == gelegt hat (const Punkt p) \t { \t \t return ((x == p.x) && (y == p.y)); \t} aber ich bin nicht sicher, ob es richtig ist und es gibt einen Fehler für keinen Konstruktor für diesen Operator, den ich nicht weiß, wie man einen macht. kannst du mich erleuchten? – Gabriel

+0

Sie versuchen, Bool's mit Punkten zu vergleichen. Das wird nicht funktionieren, es sei denn, du hast einen Operator, der einen Bool braucht. Aber es scheint, dass es keine Möglichkeit gibt, Bool's und Punkte zu vergleichen, so dass Sie das Falsche versuchen. – Scooter

Antwort

1

Es gibt keine überladene operator==, die mit bool und Point arbeiten kann. Der Compiler versucht implizit bool zu Point zu werfen, aber Point hat keinen Konstruktor, der eine bool und Point keine implizite Besetzung operator bool hat. Erstellen Sie eine überladene operator==.

//in class definition 
friend bool operator==(bool, const Point &); 

//outside class definition 
bool operator==(bool b, const Point &p) { 
    return something; 
} 
+0

In C++ - Member-Operator == wird nicht zwei Argumente. Verwenden Sie 'bool operator == (bool b)' –

+1

@JohnThoits in dieser Situation 'Finish' konnte nicht auf der rechten Seite verwendet werden, wie es im OP-Code ist –