Ihre compare
Funktion wahrscheinlich eher wie
bool COMPARE(const clPoint& i, const clPoint& j)
{ return i.x() < j.x(); }
Der aussehen sollte std::sort
Algorithmus wird in Elementen des Containers übergeben, die clPoint
sind, nicht Zeiger (und sicherlich nicht Void-Zeiger). Sie können die clPoint
Objekte als Referenz anstelle von Wert akzeptieren. Dies beseitigt auch die Notwendigkeit, von ungültigen Zeigern wegzuwerfen.
Die Funktion sollte bool
zurückgeben; i.x() - j.x()
, die Sie ursprünglich hatten, ist wahrscheinlich ein int
oder ein double
, kein bool
, so wird nicht hilfreich sein. Diese werden in bool
als false
für einen 0-Wert und true
andernfalls: so würde Ihre Funktion false
zurückgeben, wenn die Eingänge gleich waren, und sonst true
, die überhaupt nicht ist, was eine Vergleichsfunktion für std::sort
aussehen sollte. Der Kleiner-als-Operator gibt die richtige Semantik.
M.M. einen guten Punkt in den wirft Kommentare-das wird nicht funktionieren, wenn die x()
Methode der clPoint
nicht const
erklärt wurde, so stellen Sie sicher, dass es (die Unterschrift innerhalb der Klassendeklaration von PointGeneric
sollte so etwas wie Type x() const;
mögen.)
Wir vermisse etwas aus deinem Code. Wo ist Pixel definiert? – Zzirconium
Vorlage Klasse PointGeneric { public: –
Die Vergleichsfunktion sollte Eingang nehmen const Pixel *; Oder besser die gleiche Art von iFillPoints – Matteo