Funktioniert denn der Advanced Record auch mit den Generischen Listen?
Habe den zwar noch nicht verwendet, funktioniert laut Doku aber wie ein Obkekt oder eine Klasse. man kann Methoden hinzufügen, aber nichts vererben,
Sollte dann aber wie eine Klasse funktionieren und genau so referenziert werden. Ist das richtig verstanden?
Mein Beispiel habe ich jetzt wie folgt geändert, bekomme aber immer noch keine Ausgabe. Ich beziehe mich daei auf example6.lpr von hier:
https://github.com/silvercoder70/code-e ... ample6.lpr
Code: Alles auswählen
{ TData }
TData = class(TComponent)
private
FFirstName: string;
FFamilyName: String;
public
constructor Create(aFirst, aLast: String);
property FirstName: String read FFirstName;
Property FamilyName: String read FFamilyName;
end;
TDataList = specialize TFPGList<TData>;
TDataListEnumerator = specialize TFPGListEnumerator<TData>;
var
Data: TData;
DataList: TDataList;
EnumList: TDataListEnumerator;
SortedList: TSortedItems;
begin
DataList := TDataList.Create;
DataList.Add(TData.Create('Kurt','Mieth'));
DataList.Add(TData.Create('Karl','Lauterbach'));
DataList.Add(TData.Create('Ursula','Handrick'));
DataList.Add(TData.Create('Sabine','Wehner'));
DataList.Add(TData.Create('Andrea','Dachselt'));
DataList.Add(TData.Create('Ulrike','Schneider'));
DataList.Add(TData.Create('Dorothee','Konradi'));
DataList.Add(TData.Create('Lutz','Schäfer'));
DataList.Add(TData.Create('Carola', 'Flechner'));
DataList.Sort(@CompareAscending); nach example6.lpr im obigen Link
ENumList := DataList.GetEnumerator; //nach example6.lpr im obigen Link Enumerator zuweisen
while EnumList.MoveNext do //nach example6.lpr im obigen Link prüfen ob noch weitere Eintäge da sind
begin
Data := EnumList.Current; //nach example6.lpr aktuellen Eintrag holen
writeln(Data.FirstName,' ',Data.FamilyName); //nach example6.lpr aktuellen Eintrag ausgeben
end;
DataList.Free; //Liste frei geben
writeln('Zurück mit <<ENTER>>...');
end.
Warum erhalte ich nun immer noch keine Ausgabe?
Ich kann mir nicht vorstellen wieso bei einem Advanced Record die Ausgabe auf einmal funktionieren sollte.
Ich muss dann Advaced Records verlangrn duch {$modeswitch advancedrecords} und lt. Doku auch voher noch {$mode objfpc} und danch die advancedrecords einstellen.
Mein Advanced Record sieht daher so aus:
Im Projekt {$mode objfpc}{$H+}{$modeswitch advancedrecords}
type
TDataRecord = record
FFirstName: string;
FFamilyName: String;
function FirstName: String;
function FamilyName: String;
end;
function TDataRecord.FirstName: String;
begin
Result := FFirstName;
end;
function TDataRecord FamilyName: String;
begin
Result := FFamilyName;
end;
Mein Quellcode benutzt aber noch meinen alten TData Typ.
.