AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung bei einem Constructor

Ein Thema von Dragon27 · begonnen am 14. Mär 2009 · letzter Beitrag vom 14. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#1

Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 10:53
Hallo Zusammen,

ich habe gerade eine neue Klasse geschrieben, jedoch wird mir beim Constructor eine Zugriffsverletzung angezeigt. Weiß
jemand von Euch wieso?

Delphi-Quellcode:
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;
Danke!
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 10:56
Was den Fehler anbelangt vermute ich, dass du das so aufrufst:
Delphi-Quellcode:
var
  xy: TKonto;
begin
  xy.NeuesKonto(...);
statt richtig
Delphi-Quellcode:
var
  xy: TKonto;
begin
  xy := TKonto.NeuesKonto(...);
xy existiert ja da noch nicht, und du versuchst trotzdem eine Methode daraus aufzurufen.

Dann zu dem Namen: Ein Konstruktor heißt Create und nicht NeuesKonto und der Destruktor Destroy...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 11:03
Zitat von jaenicke:
Dann zu dem Namen: Ein Konstruktor heißt Create und nicht NeuesKonto und der Destruktor Destroy...
Das liegt bei einem selbst (wie man sieht ).
Jan
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 11:03
Zudem muss man im Konstruktor den geerbeten aufrufen

also als ersten Befehl inherited Create(<Parameterliste>);
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 11:06
Wenn die Klasse von TObject abgeleitet ist, ist dies überflüssig, da der Konstrukor von TObject leer ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 11:08
Zitat von mkinzler:
Zudem muss man im Konstruktor den geerbeten aufrufen
Laut OH scheint es auch da Ausnahmen zu geben:
Zitat:
Beim Aufruf mit einer Objektreferenz wird normalerweise der geerbte Konstruktor mit inherited ausgeführt.
Jan
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 11:08
Zitat von Mr_G:
Zitat von jaenicke:
Dann zu dem Namen: Ein Konstruktor heißt Create und nicht NeuesKonto und der Destruktor Destroy...
Das liegt bei einem selbst (wie man sieht ).
Den einzigen Sinn, den ich sehe, ist, wenn man die benutzenden Programmierer ärgern möchte...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 11:12
Zitat:
Beim Aufruf mit einer Objektreferenz wird normalerweise der geerbte Konstruktor mit inherited ausgeführt.
Ist keine Ausnahme. inherited; bewirkst das der Konstruktor der Superklasse mit dem selben Namen und der identischen Parameterliste aufgerufen wird.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 11:15
@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?
Jan
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zugriffsverletzung bei einem Constructor

  Alt 14. Mär 2009, 11:19
Zitat:
@mkinzler: Wie passt den Luckies Statement da rein?
Man sollte sich trotzdem angewöhnen dies zu tun. Zudem kann sich die Implementierung bei TObject jederzeit ändern
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:49 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