AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Zugriffsverletzung beim Aufruf des constructor
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung beim Aufruf des constructor

Ein Thema von bianfable · begonnen am 13. Jun 2008 · letzter Beitrag vom 14. Jun 2008
Antwort Antwort
bianfable

Registriert seit: 20. Nov 2007
23 Beiträge
 
#1

Zugriffsverletzung beim Aufruf des constructor

  Alt 13. Jun 2008, 23:15
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]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit constructor

  Alt 13. Jun 2008, 23:18
Hast du auch eine Instanz erzeugt
Markus Kinzler
  Mit Zitat antworten Zitat
bianfable

Registriert seit: 20. Nov 2007
23 Beiträge
 
#3

Re: Problem mit constructor

  Alt 13. Jun 2008, 23:20
Ja:
Feld: {array[1..33,1..24] of} TStein; War mal ein array, hab das aber zu Testzwecken ausgeklammert!

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

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit constructor

  Alt 13. Jun 2008, 23:21
Feld[i,ii] := TStein.Create(0, i, ii);
Markus Kinzler
  Mit Zitat antworten Zitat
bianfable

Registriert seit: 20. Nov 2007
23 Beiträge
 
#5

Re: Problem mit constructor

  Alt 13. Jun 2008, 23:23
Stimmt
Das wars!!!
Ok, vielen Dank...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Problem mit constructor

  Alt 14. Jun 2008, 01:00
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Problem mit constructor

  Alt 14. Jun 2008, 06:30
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Zugriffsverletzung beim Aufruf des constructor

  Alt 14. Jun 2008, 12:05
Dann noch eine Property für die Art einführen und die Eigenschaften privatisieren
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 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