qsort bringt komische Meldung
-
Hallo zusammen
ich bin gerade dabei ein Array sortieren zu wollen.
Folgende Zeilen führen zu einer Fehlermeldung: >>Keine Übereinstimmung für qsort... gefunden<<
... structTYPE* fList; ... qsort ((const void*)fList, 2, sizeof (structTYPE), compare_asc);
Die Funktion compare_asc ist folgendermassen definiert:
int _fastcall TmyClass::compare_asc (void* a, void* b)
Danke für jede Hilfe
JOJO
-
Vielleicht die Funktion auch mal so aufrufen, wie sie definiert ist:
void *a; void *b; struct TYPE* fList; ... qsort ((const void*)fList, 2, sizeof (structTYPE), compare_asc(a,b));
-
ist eine CallBackFunktion mit Aufruf der Funktion als Pointer!!!
JOJO
-
Zeiger auf normale Objekte erhält man mit dem Operator "&"... Du brauchst einen Funktionszeiger, für Funktionen gilt exakt das Selbe.
Etwas kryptisch, aber du kommst schon drauf (o;
-junix
-
Hmm.. also so ganz verstehe ich das ehrlich gesagt nicht, bzw. hilft die Borland Hilfe hier auch keinen Deut weiter, man kann die Typen casten wie man will...
JOJO
-
Ned kasten. "&Funktionsname" liefert die die Adresse der Funktion zurück.
-junix
-
jojo73_de,
Du hast schon fast alles richtig gemacht.
Da Deine Sortier-Funktion aber eine keine globale Funktion ist, sondern eine Methode, mußt Du sie als static deklarieren, um das Borland-spezifische __closure zu umgehen.
-
äh, auch nur, wenn er die compare-Funktion als Klassenfunktion erstellt hat.
-junix
-
junix schrieb:
äh, auch nur, wenn er die compare-Funktion als Klassenfunktion erstellt hat.
Ja, hat er doch (siehe code).
-
oh, muss ich übersehen haben...
-junix
-
So, jetzt stosse ich wieder dazu...
...vielen dank ersma...
Ich habe getan wie mir aufgetragen wurde und habe die Sortierungs-Funktion als static definiert, ohne jedoch irgendetwas zu bewirken: die Fehlermeldung <Keine Üebreinstimmung für qsort (...) gefunden> kommt immer noch hoch...
qsort scheint mit der fkt. compare_asc ein problem zu haben...???
JOJO