Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zugriffsverletzung beim Aufruf des constructor (https://www.delphipraxis.net/115552-zugriffsverletzung-beim-aufruf-des-constructor.html)

bianfable 13. Jun 2008 22:15


Zugriffsverletzung beim Aufruf des constructor
 
Hi Leute!

Bin noch nicht so geübt im Umgang mit eigenen Klassen!

Ich habe folgende Klasse definiert:
Delphi-Quellcode:
TStein = class(TObject)
  public
    Art: Integer; //0=leer, 1=loser Stein, 2=fester Stein
    x, y: Integer;
    constructor Create(aa, xx, yy: Integer);
    procedure Draw;
    procedure ReDraw;
  end;
Allerdings gibt es beim constructor immer einen Fehler:
Delphi-Quellcode:
constructor TStein.Create(aa, xx, yy: Integer);
begin
  inherited Create;
  Art := aa;
  x := xx;
  y := yy;
end;
Art := aa; erzeugt eine Fehlermeldung mit Zugriffsverletzung!

[edit=SirThornberry]Titel geändert damit er etwas mehr Aussagekraft bekommt - Mfg, SirThornberry[/edit]

mkinzler 13. Jun 2008 22:18

Re: Problem mit constructor
 
Hast du auch eine Instanz erzeugt

bianfable 13. Jun 2008 22:20

Re: Problem mit constructor
 
Ja:
Delphi-Quellcode:
Feld: {array[1..33,1..24] of} TStein;
War mal ein array, hab das aber zu Testzwecken ausgeklammert!

Der Aufruf dafür lautet dann:
Delphi-Quellcode:
Feld{[i,ii]}.Create(0, i, ii);
i und ii waren noch in for-Schleifen

mkinzler 13. Jun 2008 22:21

Re: Problem mit constructor
 
Delphi-Quellcode:
Feld[i,ii] := TStein.Create(0, i, ii);

bianfable 13. Jun 2008 22:23

Re: Problem mit constructor
 
Stimmt :wall:
Das wars!!!
Ok, vielen Dank...

Christian Seehase 14. Jun 2008 00:00

Re: Problem mit constructor
 
Moin bianfable,

ich hätte da noch einen kleinen Verbesserungsvorschlag, der das Ganze lesbarer macht (und Kommentare spart ;-))
Da es drei Arten von Steinen geben soll, kannst Du hierfür auch einen Typ deklarieren:

Delphi-Quellcode:
TSteinTyp = (stLeer,stLose,stFest);

TStein = class(TObject)
  public
    Art: TSteinTyp;
    x, y: Integer;
    constructor Create(aa : TSteinTyp;xx, yy: Integer);
    //...
Dann kannst Du auch, ohne zu tricksen, keinen ungültigen Wert verwenden.

Sharky 14. Jun 2008 05:30

Re: Problem mit constructor
 
Hai bianfable,

ich habe mir auch erlaubt zwei kleine Verbesserungsvorschläge einzuarbeiten.
Variablen der Klasse sollten
a: mit f anfangen und
b: keine grosse Sichtbarkeit haben

Delphi-Quellcode:
type
  TSteinTyp = (stLeer,stLose,stFest);

  TStein = class(TObject)
    fArt: TSteinTyp;
    fPosition : TPoint;
  private
    procedure SetPosition(const Value: TPoint); overload;
    procedure SetPosition(const x,y : Integer); overload;
    function GetPosition : TPoint;
  published
  public
    constructor Create(Art: TSteinTyp; x, y: Integer); overload;
    constructor Create(Art: TSteinTyp; Position : TPoint); overload;
    destructor Destroy; overload;
    procedure Draw;
    procedure ReDraw;
    property Position : TPoint Read GetPosition Write SetPosition;
  end;

implementation

{ TStein }

constructor TStein.Create(Art: TSteinTyp; x, y: Integer);
begin
  inherited Create;
  fArt := Art;
  fPosition.X := x;
  fPosition.Y := y;
end;

constructor TStein.Create(Art: TSteinTyp; Position : TPoint);
begin
  inherited Create;
  fArt := Art;
  fPosition := Position;
end;

function TStein.GetPosition: TPoint;
begin
  Result.X := fPosition.X;
  Result.Y := fPosition.Y;
end;

procedure TStein.SetPosition(const x, y: Integer);
begin
  fPosition.X := x;
  fPosition.Y := y;
end;

procedure TStein.SetPosition(const Value: TPoint);
begin
  fPosition := Value;
end;

destructor TStein.Destroy;
begin
  inherited;
end;

procedure TStein.Draw;
begin
end;

procedure TStein.ReDraw;
begin
end;

mkinzler 14. Jun 2008 11:05

Re: Zugriffsverletzung beim Aufruf des constructor
 
Dann noch eine Property für die Art einführen und die Eigenschaften privatisieren


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 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