[fpc-pascal] Help with TList example
Tony Whyman
tony.whyman at mccallumwhyman.com
Tue Sep 8 13:20:44 CEST 2020
Two observations:
1. In Pascal you should use "new" and "dispose" to allocate and
deallocate record types - not GetMem and FreeMem.
2. MyRec is a pointer type and you should code the line as
MyRec^.Value := tmp
On 08/09/2020 12:10, James Richters via fpc-pascal wrote:
> I'm trying to figure out how TList works. I found the code example below by doing a search, but I can't compile it, I get Error: Illegal qualifier on the line
> MyRec.Value := tmp;
> It's indicating the error is on the V of Value
>
> I tried commenting that line out, then I get the same error on
> MyRec.AByte := Byte(tmp);
> At the A of AByte
>
> So I commented that out too and then I get the error on
>
> Writeln('Value: ', MyRecList[tmp].Value, ' AByte: ', MyRecList[tmp].AByte);
> At the V on Value after MyRecList[tmp].
>
> I don't know enough about the syntax to figure out what's wrong here. Does anyone have any ideas? It seems like there is something fundamentally wrong.
>
> I'm trying to make a temporary list of records. Kind of like a TStringList, but instead of a list of strings, a list of my own custom records. Perhaps there is a better way?
>
>
> program Project1;
> {$mode objfpc}{$H+}
>
> uses
> SysUtils, Classes;
>
> type
> PMyRec=^TMyRec;
> TMyRec=record
> Value: Integer;
> AByte: Byte;
> end;
>
> TMyRecList=class(TList)
> private
> function Get(Index: Integer): PMyRec;
> public
> destructor Destroy; override;
> function Add(Value: PMyRec): Integer;
> property Items[Index: Integer]: PMyRec read Get; default;
> end;
>
> { TMyRecList }
>
> function TMyRecList.Add(Value: PMyRec): Integer;
> begin
> Result := inherited Add(Value);
> end;
>
> destructor TMyRecList.Destroy;
> var
> i: Integer;
> begin
> for i := 0 to Count - 1 do
> FreeMem(Items[i]);
> inherited;
> end;
>
> function TMyRecList.Get(Index: Integer): PMyRec;
> begin
> Result := PMyRec(inherited Get(Index));
> end;
>
> var
> MyRecList: TMyRecList;
> MyRec: pMyRec;
> tmp: Integer;
> begin
> MyRecList := TMyRecList.Create;
> for tmp := 0 to 9 do
> begin
> GetMem(MyRec, SizeOf(TMyRec));
> MyRec.Value := tmp;
> MyRec.AByte := Byte(tmp);
> MyRecList.Add(MyRec);
> end;
>
> for tmp := 0 to MyRecList.Count - 1 do
> Writeln('Value: ', MyRecList[tmp].Value, ' AByte: ', MyRecList[tmp].AByte);
> WriteLn(' Press Enter to free the list');
> ReadLn;
> MyRecList.Free;
> end.
>
> James
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
More information about the fpc-pascal
mailing list