2016-04-30 1 views
0
bool COMPARE(const void * i, const void * j) 
{ return (((clPoint*)i)->x() - ((clPoint*)j)->x()); } 


std::vector<clPoint> iFillPoints; 


std::sort(iFillPoints.begin(), iFillPoints.end(), COMPARE); 

ich diese Fehlermeldung erhalten, wenn ich diesekein Fehler geeignet Umwandlung unter Verwendung während std :: sort in C++

laufen
Error 16 error : no suitable conversion function from "Pixel" to "const void *" exists 
+0

Wir vermisse etwas aus deinem Code. Wo ist Pixel definiert? – Zzirconium

+0

Vorlage Klasse PointGeneric { public: –

+0

Die Vergleichsfunktion sollte Eingang nehmen const Pixel *; Oder besser die gleiche Art von iFillPoints – Matteo

Antwort

2

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.)

+0

Für ein gutes Design sollte der Komparator "const" sein (kann erfordern, dass 'x()' auch "const" gemacht wird, wenn OP dies übersehen würde) –

Verwandte Themen