Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Von TList abgeleitete Klasse um Methode Sort erweitern (https://www.delphipraxis.net/148226-von-tlist-abgeleitete-klasse-um-methode-sort-erweitern.html)

DataCool 25. Feb 2010 10:37


Von TList abgeleitete Klasse um Methode Sort erweitern
 
Hi,

ich möchte gerne eine von TList abgeleitete KLasse
um die Methode sort erweitern.
Ich weiß auch das ich das ganze normalerweise
folgendermassen funktionieren sollte:

Delphi-Quellcode:
function TXyzList.myCompare(Item1, Item2 : pointer) : Integer;
begin
  // meine Implementierung
end;

procedure TXyzList.Sort;
begin
  Sort(@myCompare); // Hier meckert der Compiler
end;
Jetzt bekomme ich allerdings die Fehlermeldungen(mit @ und ohne @):
"[DCC Fehler] obj_xyz.pas(1308): E2009 Inkompatible Typen: 'Reguläre Prozedur und Methodenzeiger"
oder
"[DCC Fehler] obj_xyz.pas(1310): E2036 Variable erforderlich"

Das Problem scheint/ist wohl die KLassenmethode, ich möchte die Vergleichsmethode ungern auslagern.
Hat jemand einen Lösungsansatz ?

Greetz Data

taaktaak 25. Feb 2010 10:39

Re: Von TList abgeleitete Klasse um Methode Sort erweitern
 
statt function TXyzList.myCompare
besser function myCompare

DataCool 25. Feb 2010 10:46

Re: Von TList abgeleitete Klasse um Methode Sort erweitern
 
Hi,

das eine auslagern aus der Klasse funktioniert weiß ich ;-)
Ich möchte es aber ungern aus der Klasse auslagern, gibt es keine andere Möglichkeit ?

Greetz Data

jfheins 25. Feb 2010 10:50

Re: Von TList abgeleitete Klasse um Methode Sort erweitern
 
Eventuell funktioniert es, wenn du die Vergleichsfunktion als Klassenfunktion deklarierst

himitsu 25. Feb 2010 10:59

Re: Von TList abgeleitete Klasse um Methode Sort erweitern
 
Zitat:

Delphi-Quellcode:
TListSortCompare = function (Item1, Item2: Pointer): Integer;

TListSortCompare ist nunmal nur als Funktion deklariert ... also kann man da nicht einfach eine Methode übergeben.

Versuch mal eines davon
Delphi-Quellcode:
procedure TXyzList.Sort;
begin
  Sort(function(Item1, Item2: Pointer): Integer
       begin
         Result := myCompare(Item1, Item2);
       end);
end;

procedure TXyzList.Sort;
begin
  SortList(myCompare);
end;

DataCool 25. Feb 2010 11:33

Re: Von TList abgeleitete Klasse um Methode Sort erweitern
 
Hi,

leider alles nein :?

Dann werde ich wohl oder übel die function erstmal aus der Klasse lösen,
aber falls jemanden noch eine Lösung zu dem Problem einfällt immer her damit.

Danke & Greetz Data

himitsu 25. Feb 2010 12:08

Re: Von TList abgeleitete Klasse um Methode Sort erweitern
 
Was bemängelt denn der Compiler an der anonymen Prozedur? (also an dem ersten Beispiel)

Immerhin hab ich es direkt von Emba aus deren eigenem Sortaufruf.

DataCool 25. Feb 2010 12:26

Re: Von TList abgeleitete Klasse um Methode Sort erweitern
 
Er bemängelt :

[DCC Fehler] obj_Leistungen.pas(1319): E2029 Ausdruck erwartet, aber 'FUNCTION' gefunden <<< -- bei Wort function
[DCC Fehler] obj_Leistungen.pas(1319): E2023 Funktion benötigt Ergebnistyp <<< -- beim Wort Item1

himitsu 25. Feb 2010 12:43

Re: Von TList abgeleitete Klasse um Methode Sort erweitern
 
Und du hast das auch in deinem D2010 getestet?

[edit] was mir grade auffällt ... Sort und Sort heißen gleich, was natürlich nicht grad von Vorteil ist.

eventuell ja so :gruebel:
Delphi-Quellcode:
procedure TXyzList.Sort;
begin
  inherited Sort(
    function(Item1, Item2: Pointer): Integer
    begin
      Result := myCompare(Item1, Item2);
    end);
end;

DataCool 25. Feb 2010 14:46

Re: Von TList abgeleitete Klasse um Methode Sort erweitern
 
Hi,

dieses Projekt ist im Moment in D2007 Prof.

Das mit den gleichen Namen ist mir auch schon aufgefallen, deshalb habe ich es wie folgt geändert :

Delphi-Quellcode:
function TLstPosList.ComparePosNumbers(Item1, Item2 : Pointer): Integer;
begin
  // 
end;

procedure TLstPosList.SortWithPosNr;
begin
  //Sort(@ComparePosNumbers);
  Sort(function(Item1, Item2: Pointer): Integer
       begin
         Result := ComparePosNumbers(Item1, Item2);
       end);
end;
In dieser Kombination kommen in D2007 die schon oben geschilderten Fehlermeldungen.

Greetz Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz