![]() |
TList Sort funktioniert nicht
Hidiho,
ich hab mir, wie hier im Forum irgendwo beschrieben war, eine Sortierfunktion für eine TList von mir gebastelt. Diese TList beinhaltet x TStringLists. Gehe ich die Liste mit for durch, funktioniert das einwandfrei. Sprich, ich kann jedes Element der TList problemlos in eine TStringList umwandeln und dann damit arbeiten. In meiner Sortierfunktion klappt das aber komischerweise nicht, da stürzt er mir immer ab, wenn ich "item2" umwandeln möchte ("item1" funktioniert prächtig). Hat wer ne Idee, woran das liegen könnte? Das Sort wird übrigens in der gleichen Funktion aufgerufen, in der ich per For auf die Liste zugreife, also an sich müsste die TList da ok sein. ... Hier noch mal der relevante Quelltext den ich verwende:
Delphi-Quellcode:
//...
type {*--- functions ---*} TSourceSorter = function(item1, item2: Pointer): Integer of object; //... {*--- TfrmMain ---*} TfrmMain = class(TForm) private sourceSorter: TSourceSorter; function compareSources(item1, item2: Pointer): Integer; //... procedure TfrmMain.FormCreate(Sender: TObject); begin sourceSorter := compareSources; end; //... // builds the data-list based on the given source-list function TfrmMain.buildDataList(sourceList: TList): TList; begin sourceList.Sort(TListSortCompare(@sourceSorter)); // <- Abbruch! // loop through each source-set for sourceIdx := 0 to sourceList.Count - 1 do begin curSource := TStringList(sourceList[sourceIdx]); // <- Funktioniert einwandfrei sourceType := StrToInt(curSource[0]); //... // sorts the given source-sets function TfrmMain.compareSources(item1, item2: Pointer): Integer; begin // cast items to sets set1 := TStringList(item1); set2 := TStringList(item2); // <- Zugriffsverletzung Danke im voraus cu Patrick |
Re: TList Sort funktioniert nicht
AFAIK darf die Vergleichsroutine keine Methode, sondern muss eine einfache Funktion sein.
|
Re: TList Sort funktioniert nicht
Kleiner Tipp am Rande: Wenn du nicht weißt, was du tust, caste NIE Zeiger auf Code irgendwelcher Art.
|
Re: TList Sort funktioniert nicht
Zitat:
... @Deddy Also der Compiler meckert ja nich und ich kanns ja auch ausführen und debuggen, von daher denke ich nicht, dasses daran liegt. Wäre die Funktion vom falschen Typ würde der Compiler ja schon meckern, oder er zumindest bei der Funktionszuweisung im Create-Event abstürzen. *denk* |
Re: TList Sort funktioniert nicht
Nur weil mein Compiler nicht meckert, heißt das ja nicht, dass ich keine Fehler mache.
|
Re: TList Sort funktioniert nicht
Zitat:
Aber wenn die Funktion vom falschen Typ wäre, dann würde er doch direkt beim compilieren meckern, so wie ich es ganz am Anfang hatte, als ich es direkt mit
Delphi-Quellcode:
versucht hatte.
sourceList.Sort(@TfrmMain.compareSources)
Da kam ja dann die sinngemäße Fehlermeldung dass eine Methode nicht kompatibel zu einer Funktion ist. Daraufhin habe ich mich hier im Forum mal kundig gemacht und ein Beispiel gefunden, wo es so beschrieben war, wie ich es jetzt versucht habe umzusetzten. *G* |
Re: TList Sort funktioniert nicht
Das ist genau mein Punkt. Wenn du castest, sagst du dem Compiler sinngemäß: "Lass mich nur machen, ich weiß schon, was ich tue." Nur dass das für dich nicht zuzutreffen scheint.
|
Re: TList Sort funktioniert nicht
DeddyH hat Recht:
Delphi-Quellcode:
//...
type {*--- TfrmMain ---*} TfrmMain = class(TForm) private //... implementation // sorts the given source-sets function compareSources(item1, item2: Pointer): Integer; begin // cast items to sets set1 := TStringList(item1); set2 := TStringList(item2); // <- Zugriffsverletzung end; // builds the data-list based on the given source-list function TfrmMain.buildDataList(sourceList: TList): TList; begin sourceList.Sort(compareSources); end; //... |
Re: TList Sort funktioniert nicht
Jetzt scheints zu funktionieren... Danke! :)
Aber dann erklärt sich mir nich, warum ein anderer mit dem (ursprünglich) gleichen Problem wie ich, nich direkt so beraten wurde wie ich, sondern auf diesem umständlichen Wege: ![]() Oder ist das wieder was ganz Anderes :?: ... @Apollonius Irgendwie weiß ich immer noch nich, was genau Du jetzt von mir willst. :mrgreen: :?: Dann sag mir doch einfach wie ich das Ganze lösen kann, ohne einen Pointer zu casten. Wie die Vergleichsfunktion auszusehen hat is ja nun ma vorgegeben und das ich da 2 Pointer als Parameter hab, hab ich mir ja nich selber ausgedacht. :spin: ... Irgendwie steh ich Heute komplett auffem Schlauch. :cheers: |
Re: TList Sort funktioniert nicht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz