Problem mit TObjectList->Sort
-
Hallo,
ich arbeite mit dem Borland C++-Builder 6.0 und habe ein Problem mit dem Sortieralgorithmus der TObjectList.
In der Hilfe ist dazu folgendes Beispiel angegeben:int __fastcall CompareNames(void *Item1, void *Item2) { return CompareText(((TComponent *)Item1)->Name, ((TComponent *)Item2)->Name); } void __fastcall TForm1::Button1Click(TObject *Sender) { List1->Sort(CompareText); }In meiner Anwendung wollte ich das jetzt so umsetzen:
// Definition der Vergleich-Funktion int __fastcall CompareNames(void *Item1, void *Item2) { return CompareText(((c_Mitarbeiter *)Item1)->getNachname(), ((c_Mitarbeiter *)Item2)->getNachname()); } // Aufruf der Sortier-Methode ObjectList1->Sort(CompareText);Dabei ist ‚c_Mitarbeiter’ eine selbst geschriebene Klasse, die dort definierte Methode ‚getNachname’ gibt einen AnsiString zurück.
Für die Zeile, in der der Sort-Aufruf stattfindet, erscheint beim Kompilieren folgende Fehlermeldung:
"Konvertierung von ‚int (__fastcall)(const AnsiString, const AnsiString)’ nach ‚int(__fastcall)(void*, void*)’ nicht möglich"**Ist das Problem, dass er einen AnsiString vergleichen soll? Oder kann man keine selbst geschriebenen Klassen zur Sortierung verwenden?
Ich würde mich freuen, wenn mir jemand einen Tipp gibt, was ich falsch mache.
Vielen Dank,
Junimond
-
Hallo
ich vermute es muß so aussehen
ObjectList1->Sort(CompareNames);bis bald
akari
-
Hallo akari,
danke für die schnelle Antwort!
Ich hab das so versucht, wie du vorgeschlagen hast, dabei bringt er folgenden Konvertierungsfehler:
"Konvertierung von 'int(__fastcall)(__closure )(void, void*))(void*, void*)' nach 'int(__fastcall*)(void*, void*)' nicht möglich"**Die Meldung sieht mir noch etwas kryptischer aus als die vorherige.
Vor allem der Teil mit dem '(__closure )' ist mir unbekannt, das Schlüsselwort habe ich ja auch in meinem Code gar nicht verwendet.
Hat jemand vielleicht eine Idee, was es damit auf sich haben könnte?Gruß
Junimond
-
Hallo
nein, die Fehlermeldung ist nicht kryptisch, sondern sagt (aufgrund des __closure im ersten Teil) das du CompareNames als Klassenmethode deklariert hast. Es muß aber eine statische Funktion sein.
bis bald
akari
-
Hallo akari,
jetzt funktioniert es, vielen Dank für die schnelle Hilfe!

Gruß
Junimond