Can you please give me an example of the correct way to use new and dispose?
I'll try the pointer Thanks for the advice James -----Original Message----- From: fpc-pascal <fpc-pascal-boun...@lists.freepascal.org> On Behalf Of Tony Whyman via fpc-pascal Sent: Tuesday, September 8, 2020 7:21 AM To: fpc-pascal@lists.freepascal.org Cc: Tony Whyman <tony.why...@mccallumwhyman.com> Subject: Re: [fpc-pascal] Help with TList example 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@lists.freepascal.org > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal > _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal