| Autor |
Beitrag |
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 11.02.03 17:38
Ich habe eine TObjeclist von Personen mit u.a. Geburtsdatum die würde ich gerne nach Geburtsdatum sortieren. In der Hilfe steht zu Sort von TOBJectlist ein Beispiel:
Quelltext 1: 2: 3: 4:
| function CompareNames(Item1, Item2: Pointer): Integer; begin Result := CompareText((Item1 as TComponent).Name, (Item2 as TComponent).Name); end; |
Also hab ich das für mich so übertragen
Quelltext 1: 2: 3: 4:
| function sortGeburt(item1,item2:pointer):integer; begin result:=comparedatetime((item1 as person).gebdatum,(item2 as person).gebdatum); end; |
Der Compiler spuckt mir dann diese Fehlermeldung aus:
Operator not applicable to this operand type und
'END' expected but ',' found
was mache ich falsch?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 11.02.03 17:41
Da fehlt dir irgendwo im Quelltext ein end.
Aber wie hast du denn das Geburtdatum vorliegen? Als String? Dann mußt du ihn erst in ein TDate umwandeln und dann vergleichen, sonst geht das nämlich in die Hose.
|
|
Gausi 
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 11.02.03 17:51
Danke für die superschnelle Antwort.
aber: gebdatum ist nicht als string, sondern als tdatetime gespeichert. Der Vergleich sollte also klappen.
Und das mir bei der einen Fehlermeldung irgendwo ein "end" fehlt, ist mir auch klar, es ist nur so, dass mir KEIN "end" mehr fehlt, wenn ich die gesamte Funktion auskommentiere.
Und das kommt mir SEHR seltsam vor, ehrlich gesagt...
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Di 11.02.03 18:19
Hallo,
da Problem kann in der Typumwandlung (item1 as person) liegen, wenn "person" kein Objekt ist. Wie ist person deklariert?
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Gausi 
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 11.02.03 18:29
Person hab ich so definiert
Quelltext 1: 2: 3: 4: 5: 6:
| person = class(tobject) VorName:string; Nachname:string; gebdatum:tdatetime; {...} end; |
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Di 11.02.03 18:43
Hallo,
hilft das?
Quelltext 1: 2: 3: 4:
| function sortGeburt(item1,item2:pointer):integer; begin result:=Integer(comparedatetime((item1 as person).gebdatum,(item2 as person).gebdatum)); end; |
evtl. kannst Du es auch so versuchen:
Quelltext 1: 2: 3: 4: 5: 6:
| function sortGeburt(item1, item2:Person):integer; begin if (Item1.gebdatum<Item2.gebdatum) then Result:=1 else if (Item1.gebdatum<Item2.gebdatum) then Result:=-1 else Result:=0; end; |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Di 11.02.03 20:02
Das funktioniert nicht, da item1 als Pointer und nicht als TObject (oder Nachfahre) deklariert ist. Der as-Operator kann nämlich nur auf Objekte angewandt werden, nicht jedoch auf untypisierte Zeiger.
Da du aber genau weißt, dass item1 und item2 immer von der Klasse Person sind, kannst du einen direkten Typcast (ohne is-Prüfung) durchführen.
Quelltext
_________________ Ist Zeit wirklich Geld?
|
|
Gausi 
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 12.02.03 00:06
@AndiB
Danke, das hat mir geholfen, jetzt läuft es durch. Zumindest spuckt der Compiler keine Fehler mehr aus. Ob tatsächlich auch sortiert wird, werde ich morgen testen  (...kann es sein, dass die Forums-Uhr 2 Stunden nachgeht?)
Aber noch was: Hab ich da was Grundlegendes nicht verstanden, oder ist die Hilfe an der Stelle fehlerhaft? Da steht das doch mit "as" drin..?
|
|