Pointervergleich
-
Ich möchte zwei Adressen von Pointern miteinander vergleichen, um herauszubekommen, ob sie auf das Selbe Element zeigen
bool all::operator==(const all::smart_ptr<all::building> left, const all::smart_ptr<all::building> rigth) { if(*left == *right) { return true; } else { return false; } }
smart_ptr ist ne Smart_ptr-Klasse, bei der ich den Operator * überladen hab, um an den Pointer heran zu kommen.
Mein Compiler meckert:
error C2679: Binaerer Operator '==' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::ios_base &(class std::ios_base &)' akzeptiert (oder keine g eeignete Konvertierung moeglich)
Was kann ich dagegen tun???
thx
Glamdring
-
Ist all ein namespace oder eine Klasse?
Du kannst die Funktion operator== als friend deines smart-pointers deklarieren. Dann kannst du in der Funktion auf private Variablen zugreifen.
operator* sollte aber keinen Pointer sondern eine Referenz zurückgeben.
-
left==right
so muss es heissen.
denn smartpointer sollen sich wie echte zeiger verhalten, folglich sollte == auf smartpointer vergleichen ob die beiden smartpointer auf das selbe objekt zeigen.
-
Mach die Funktion inline und vor allem kürzer:
return (left == right);
MfG MAV
-
OK, danke jetzt gehts