Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array eigenschaft initialisieren (https://www.delphipraxis.net/81724-array-eigenschaft-initialisieren.html)

schuetzejanett 2. Dez 2006 16:30


Array eigenschaft initialisieren
 
Hallo habe eine klasse TPlayer geschrieben die über eine Array eigenschaft points verfügt. Wenn ich allerdings darauf zugreifen will, funktioniert das nicht, weil der zeiger von points auf nil zeigt.
Wie kann ich diese eigenschaft initialsieren weil setlength funktioniert ja nciht oder wie setze ich die länge schon beim objekt anlegen?

Delphi-Quellcode:
type TPlayer = class(TObject)
  private
   f_name :String;
   f_stand:integer;  
   f_games : array of Tgame;

   procedure setStand(stand : Integer);
   procedure setName(name : string);

    function GetPoints(index: integer): integer;
    procedure SetPoints(Value: integer;index: integer);
  public
    constructor Create(name : String);
    property name: String read f_Name write setName;     //spielername
    property stand:Integer read f_Stand write setStand; //aktueller punktestand bzw. nächstes Ziel
    property points[index : integer]: integer read GetPoints write SetPoints; default

  end;
implementation

{ TPlayer }

constructor TPlayer.Create(name: String);
begin
SetName(name);
end;

function TPlayer.GetPoints(index: integer): integer;
begin
result := Points[index];
end;

procedure TPlayer.setName(name: string);
begin
f_name := name;
end;

procedure TPlayer.SetPoints(  value: integer;index: integer);
begin
points[index] := value;
end;

procedure TPlayer.setStand(stand: Integer);
begin
f_stand := stand;
end;

SirThornberry 2. Dez 2006 16:33

Re: Array eigenschaft initialisieren
 
du hast da irgendwie ne riesen Rekursion. Dein Property Points ruft die Methoden GetPoints und SetPoints auf welche wiederum auf das Property Points zugreifen welches auf die Methoden GetPoints und SetPoints zugreift....

schuetzejanett 2. Dez 2006 16:34

Re: Array eigenschaft initialisieren
 
und wie löse ich das problem .
Ich brauche ja ein array in dem die einzelnen punkte gespeichert werden

chaosben 2. Dez 2006 16:37

Re: Array eigenschaft initialisieren
 
Tschaaa ... du brauchst eine Variable, die deine Points hält. Im Moment hast du nur die Zugriffsfunktionen definiert.

Zum Beispiel so
Delphi-Quellcode:
private
  f_Points : array of Integer;
//...

//und dann musst du noch diese Funktionen anpassen, weil: Siehe SirThornberry
function TPlayer.GetPoints(index: integer): integer;
begin
result := f_Points[index];
end;

procedure TPlayer.SetPoints(  value: integer;index: integer);
begin
f_points[index] := value;
end;

//und jetzt kannst du das array auch initialisieren
constructor TPlayer.Create(name: String);
begin
SetName(name);
   SetLength(f_Points,10); //später das freigeben nicht vergessen
end;
//edit: Man tippe ich langsam ... 2 Beiträge in der Zeit :)

schuetzejanett 2. Dez 2006 16:43

Re: Array eigenschaft initialisieren
 
Danke das wars , habe bloß gelesen das man bei arrayeigenschaften bei read und write kein feld schreiben darf und das etwas missverstanden

Hawkeye219 2. Dez 2006 17:03

Re: Array eigenschaft initialisieren
 
Jetzt noch die Parameter richtig anordnen, dann funktioniert es:

Delphi-Quellcode:
type
  TPlayer = class(TObject)
  private
    :
//    procedure SetPoints(Value: integer;index: integer); // so nicht
    procedure SetPoints (index: integer; value: integer); // besser so
    :
  end;

// procedure TPlayer.SetPoints(  value: integer;index: integer); // so nicht
procedure TPlayer.SetPoints (index: integer; value: integer);    // besser so
begin
  f_points[index] := value;
end;
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz