![]() |
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:
Allerdings gibt es beim constructor immer einen Fehler:
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;
Delphi-Quellcode:
Art := aa; erzeugt eine Fehlermeldung mit Zugriffsverletzung!
constructor TStein.Create(aa, xx, yy: Integer);
begin inherited Create; Art := aa; x := xx; y := yy; end; [edit=SirThornberry]Titel geändert damit er etwas mehr Aussagekraft bekommt - Mfg, SirThornberry[/edit] |
Re: Problem mit constructor
Hast du auch eine Instanz erzeugt
|
Re: Problem mit constructor
Ja:
Delphi-Quellcode:
War mal ein array, hab das aber zu Testzwecken ausgeklammert!
Feld: {array[1..33,1..24] of} TStein;
Der Aufruf dafür lautet dann:
Delphi-Quellcode:
i und ii waren noch in for-Schleifen
Feld{[i,ii]}.Create(0, i, ii);
|
Re: Problem mit constructor
Delphi-Quellcode:
Feld[i,ii] := TStein.Create(0, i, ii);
|
Re: Problem mit constructor
Stimmt :wall:
Das wars!!! Ok, vielen Dank... |
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:
Dann kannst Du auch, ohne zu tricksen, keinen ungültigen Wert verwenden.
TSteinTyp = (stLeer,stLose,stFest);
TStein = class(TObject) public Art: TSteinTyp; x, y: Integer; constructor Create(aa : TSteinTyp;xx, yy: Integer); //... |
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; |
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:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz