为什么我必须使用我的类型名称来操作它? [Delphi/Lazarus]
Why do I have to use the name of my type to operate it? [Delphi/Lazarus]
type
TSpieler = record
Name : string;
Konto,Position : integer;
Reihe : boolean;
Panel : TPanel;
end;
var
PL1, PL2, PL3, PL4, PL5 : TSpieler;
function getPlayer;
begin
Result := PL1;
end;
procedure FeldKaufen;
var
TestPlayer: TSpieler;
begin
TestPlayer := getPlayer; {PL2,PL3,PL4,PL5}
inc(TestPlayer.Konto); {does not save}
{inc(PL1.Konto);} {works just fine with every Player}
end;
如何保存 PL1
值并从 TestPlayer
编辑它们?
问题是我通过这个 getPlayer
函数获取玩家的名字,这很好,因为它使整个代码更简洁。
您还没有编写可验证的代码。
然而,记录是value type(与引用、指针类型(对象)相反),并且将一个记录分配给另一个只是复制所有字段。因此更改第二条记录(副本)不会影响第一条记录(记录指针字段等特殊情况除外).
一种解决方案是使用指向 Spieler 的指针:
type
PSpieler = ^TSpieler;
TSpieler = record
Name: string;
Konto, Position: integer;
Reihe: boolean;
Panel: TPanel;
end;
var PL1, PL2, PL3, PL4, PL5: TSpieler;
function getPlayer: PSpieler;
begin
Result := @PL1;
end;
procedure FeldKaufen;
var TestPlayer: PSpieler;
begin
TestPlayer := getPlayer; {PL2,PL3,PL4,PL5}
inc(TestPlayer.Konto); {does not save}
{inc(PL1.Konto);} {works just fine with every Player}
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FeldKaufen;
end;
type
TSpieler = record
Name : string;
Konto,Position : integer;
Reihe : boolean;
Panel : TPanel;
end;
var
PL1, PL2, PL3, PL4, PL5 : TSpieler;
function getPlayer;
begin
Result := PL1;
end;
procedure FeldKaufen;
var
TestPlayer: TSpieler;
begin
TestPlayer := getPlayer; {PL2,PL3,PL4,PL5}
inc(TestPlayer.Konto); {does not save}
{inc(PL1.Konto);} {works just fine with every Player}
end;
如何保存 PL1
值并从 TestPlayer
编辑它们?
问题是我通过这个 getPlayer
函数获取玩家的名字,这很好,因为它使整个代码更简洁。
您还没有编写可验证的代码。
然而,记录是value type(与引用、指针类型(对象)相反),并且将一个记录分配给另一个只是复制所有字段。因此更改第二条记录(副本)不会影响第一条记录(记录指针字段等特殊情况除外).
一种解决方案是使用指向 Spieler 的指针:
type
PSpieler = ^TSpieler;
TSpieler = record
Name: string;
Konto, Position: integer;
Reihe: boolean;
Panel: TPanel;
end;
var PL1, PL2, PL3, PL4, PL5: TSpieler;
function getPlayer: PSpieler;
begin
Result := @PL1;
end;
procedure FeldKaufen;
var TestPlayer: PSpieler;
begin
TestPlayer := getPlayer; {PL2,PL3,PL4,PL5}
inc(TestPlayer.Konto); {does not save}
{inc(PL1.Konto);} {works just fine with every Player}
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FeldKaufen;
end;