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


Anmelden zum Antworten