![]() |
Zugriffsverletzung bei einem Constructor
Hallo Zusammen,
ich habe gerade eine neue Klasse geschrieben, jedoch wird mir beim Constructor eine Zugriffsverletzung angezeigt. Weiß jemand von Euch wieso?
Delphi-Quellcode:
Danke!
type TKonto = class
BeschEinnahmen:TStringlist; GeldEinnahmen:Tstringlist; BeschAusgaben:Tstringlist; GeldAusgaben:Tstringlist; KName:String; public Procedure Add(Art:String;Besch:String;Geld:String); Procedure Delete(Art:String;Index:Integer); Function CalcSaldo():String; Constructor NeuesKonto(NKName:string); Destructor KontoOhneSpeichernBeenden; end; implementation Destructor TKonto.KontoOhneSpeichernBeenden; begin BeschEinnahmen.Free; GeldEinnahmen.Free; BeschAusgaben.Free; GeldAusgaben.Free; end; Constructor TKonto.NeuesKonto(NKName:string); begin BeschEinnahmen:=Tstringlist.Create; //Hier ist der Fehler GeldEinnahmen:=Tstringlist.Create; BeschAusgaben:=Tstringlist.Create; GeldAusgaben:=Tstringlist.Create; KName:=NKName; end; |
Re: Zugriffsverletzung bei einem Constructor
Was den Fehler anbelangt vermute ich, dass du das so aufrufst:
Delphi-Quellcode:
statt richtig
var
xy: TKonto; begin xy.NeuesKonto(...);
Delphi-Quellcode:
xy existiert ja da noch nicht, und du versuchst trotzdem eine Methode daraus aufzurufen.
var
xy: TKonto; begin xy := TKonto.NeuesKonto(...); Dann zu dem Namen: Ein Konstruktor heißt Create und nicht NeuesKonto und der Destruktor Destroy... |
Re: Zugriffsverletzung bei einem Constructor
Zitat:
|
Re: Zugriffsverletzung bei einem Constructor
Zudem muss man im Konstruktor den geerbeten aufrufen
also als ersten Befehl
Delphi-Quellcode:
inherited Create(<Parameterliste>);
|
Re: Zugriffsverletzung bei einem Constructor
Wenn die Klasse von TObject abgeleitet ist, ist dies überflüssig, da der Konstrukor von TObject leer ist.
|
Re: Zugriffsverletzung bei einem Constructor
Zitat:
Zitat:
|
Re: Zugriffsverletzung bei einem Constructor
Zitat:
|
Re: Zugriffsverletzung bei einem Constructor
Zitat:
|
Re: Zugriffsverletzung bei einem Constructor
@jaenicke: Da Delphi oft zu Ausbildungszwecken benutzt wird, gehen viele nicht unbedingt auf die "sprachspezifischen Besonderheiten" ein sondern nutzen das was sie als "sprechende Namen" empfinden.
@mkinzler: Wie passt den Luckies Statement da rein? |
Re: Zugriffsverletzung bei einem Constructor
Zitat:
|
Re: Zugriffsverletzung bei einem Constructor
Zitat:
|
Re: Zugriffsverletzung bei einem Constructor
Hallo Zusammen,
danke für die zahlreichen Antworten. Eines habe ich aber jetzt doch nicht verstanden.... Ich wollte 2 Constructoren machen. 1 Wenn das Konto schon besteht (aus einer Datei laden) und den anderen wenn das Konto komplett neu ist. Das ganze habe ich mal so in meiner Schulzeit gelernt. Bin da jetzt ein wenig verwirrt... ;-) Was den Fehler anbetrifft, der ist nun weg ;-) Habe tatsächlich das Crearte falsch aufgerufen .... Danke! |
Re: Zugriffsverletzung bei einem Constructor
Dann machts du zwei Konstruktoren und übelädst den standar Konstruktor.
|
Re: Zugriffsverletzung bei einem Constructor
Mehrere Kostruktoren sind natürlich möglich. Man könnte es aber auch mit Parametern lösen
|
Re: Zugriffsverletzung bei einem Constructor
Ich würde es noch anders lösen: Ein Standardkonstruktor, der alles so initialisiert als wenn es ein neues Konto ist. Dazu eine Methode um die Daten aus einer angegebenen Datei zu laden. Dann wäre der Weg immer über den Konstruktur - und nur bei bestehenden Konten zusätzlich über die Methode.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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-2025 by Thomas Breitkreuz