Delphi-Problem: Sortierung einer Tobichteliste

8

Ich möchte meine generische tobjectlist mit der integrierten Sortiermethode sortieren.

hier ist was ich mache:

%Vor%

meine Comparer-Funktion sieht so aus:

%Vor%

Laut den Spezifikationen sollte es so funktionieren.

Ich erhalte einen Compiler Fehler E2250 Es existiert keine überladene Version von 'Sort' mit diesen Parametern (der genaue Wortlaut unterscheidet sich, ich benutze eine nicht englische Version von RAD Studio)

Ich habe keine Ahnung, warum das nicht gültig sein sollte. Pascal - hat jemand von euch Einsicht, um das mitzuteilen?

    
sum1stolemyname 24.01.2011, 16:20
quelle

3 Antworten

8

Du bist fast da. Da ich nicht weiß, was MyType ist, müssen Sie möglicherweise den Aufruf Ihrer myCompare Funktion ändern.

%Vor%     
Leonardo Herrera 24.01.2011, 17:09
quelle
6

TObjectList<T>.Sort wird wie folgt deklariert:

%Vor%

IComparer<T> ist definiert als:

%Vor%

Sie instanziieren TObjectList<MyType> und müssen daher IComparer<MyType> an Sort übergeben. Um dies zu tun, benötigen Sie ein Objekt, um eine konkrete Implementierung dieser Schnittstelle bereitzustellen.

Eine naheliegende Möglichkeit wäre, die Klasse TObjectList<MyType> zu untergliedern und die Schnittstelle dort zu implementieren.

Eine andere Möglichkeit besteht darin, TComparer<T> zu verwenden, um mit der Funktion IComparer<T> class ein Construct on demand zu erstellen. Sie müssten eine Vergleichsfunktion bereitstellen:

%Vor%

Leonardos Antwort zeigt, wie man das macht.

    
David Heffernan 24.01.2011 16:40
quelle
4

Wenn der Compiler sagt, dass keine überladene Version mit diesem Parametertyp existiert, fragen Sie sich, welche Überladungen do existieren. Überprüfen Sie den Quellcode oder die Dokumentation , um das herauszufinden.

Dort sehen Sie, dass TObjectList<T> zwei Sort Methoden von TList<T> erbt. Man nimmt keine Argumente, und das andere nimmt einen Verweis auf etwas, das die IComparer<T> Schnittstelle implementiert. Ihre Standalone-Funktion passt nicht dazu. Schreiben Sie einen Nachkomme von TComparer<MyType> und überschreiben Sie dessen Compare -Methode.

    
Rob Kennedy 24.01.2011 16:41
quelle