Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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:
ausblenden 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
ausblenden 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 11.02.03 18:29 
Person hab ich so definiert
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
person = class(tobject)
VorName:string;
Nachname:string;
gebdatum:tdatetime;
{...}
end;
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Di 11.02.03 18:43 
Hallo,

hilft das?

ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Di 11.02.03 20:02 
Zitat:
(item1 as person)

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.
ausblenden Quelltext
1:
Person(item1).					

_________________
Ist Zeit wirklich Geld?
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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..?