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 AV bei inherited Create; (https://www.delphipraxis.net/34966-av-bei-inherited-create%3B.html)

glkgereon 30. Nov 2004 19:52


AV bei inherited Create;
 
moin, ich hab mir ne klasse geschrieben, um elo in dwz und umgekehrt umzurechnen (Schach...)

alle folgenden klassen sind von TObject abgeleitet

nun habbich folgende struktur(ich liste einfach mal alle "verlinkten" sachen auf):

Delphi-Quellcode:
Test:=TSpielerTable.Create;
Delphi-Quellcode:
constructor TSpielerTable.Create;
begin
  inherited Create;
  FCount := 0;
  SetLength(Spieler,0);
  Spieler[0] := TSpieler.Create;
end;
Delphi-Quellcode:
constructor TSpieler.Create;
begin
  inherited Create;
  FDaten := TDaten.Create;
  FWerte := TWerte.Create;
end;
Delphi-Quellcode:
constructor TDaten.Create;
begin
  inherited Create;
end;
Delphi-Quellcode:
constructor TWerte.Create;
begin
  inherited Create;
  FUmrechnen.Create;
  FPlayedAgainst.Create;
end;
Delphi-Quellcode:
constructor TUmrechnen.Create;
begin
  inherited Create;
end;
nun kommt bei letzterem beim "inherited Create;" eine Av (Zugriffsverletzung bei adresse 40005B99 im modul rtl70.bpl) :?

das wirklich seltsame ist nun, das er, wenn man bei der av auf ok klickt, er nach F9 im Code sofort zur Destroy-Procedure springt... :wiejetzt: ...ist das normal?

die klasse TUmrechnen besteht nur aus funktionen...aber das einbauen eines Dummy-Strings schafft auch keine abhilfe....

ich bin echt am verzweifeln (*heul*) :cry:

falls es wen interessiert...TUmrechnen ist wie folgt deklariert:
Delphi-Quellcode:
//##### TUmrechnen #####
  TUmrechnen = class(TObject)
    private
      FDummy: string;
    published
      constructor Create;
      destructor Destroy; override;
      function EloToDwz(Elo: integer): integer;
      function EloToIngo(Elo: integer): integer;
      function EloToBcf(Elo: integer): integer;
      function DwzToElo(Dwz: integer): integer;
      function DwzToIngo(Dwz: integer): integer;
      function DwzToBcf(Dwz: integer): integer;
      function IngoToElo(Ingo: integer): integer;
      function IngoToDwz(Ingo: integer): integer;
      function IngoToBcf(Ingo: integer): integer;
      function BcfToElo(Bcf: integer): integer;
      function BcfToDwz(Bcf: integer): integer;
      function BcfToIngo(Bcf: integer): integer;
    end;
//##### Ende TUmrechnen #####

jim_raynor 30. Nov 2004 19:57

Re: AV bei inherited Create;
 
Zitat:

Zitat von glkgereon
das wirklich seltsame ist nun, das er, wenn man bei der av auf ok klickt, er nach F9 im Code sofort zur Destroy-Procedure springt... :wiejetzt: ...ist das normal?

Ja das ist normal. Sobald eine Exception im Constructor ausgelöst wird, wird das Objekt sofort wieder zerstört. Ich würde mal das Problem beim erstellen des Objektes suchen.

glkgereon 30. Nov 2004 20:00

Re: AV bei inherited Create;
 
das ist der KOMPLETTE code den ich gepostet hab...alle code-ausschnitte sind zu 100% vollständig

auch die zugriffe in TSpielerTable.Create auf FCount bzw das SetLength lösen keine weitern procedures aus...

daran verzweifele ich ja, es muss imho an dem Inherited Create; liegen, da ansonsten nichts gemacht wird

und insbesondere das verwirrt mich ja so

jim_raynor 30. Nov 2004 20:03

Re: AV bei inherited Create;
 
Achso. Hab ich nicht gesehen und da ist doch auch schon der Fehler:

fUmrechnen.Create ist falsch, genauso wie FPlayedAgainst.Create;. Komisch bei den anderen hast du es doch richtig gemacht. :gruebel:

Create muss immer an der Klasse aufgerufen werden, nie an der Variablen.

Keldorn 30. Nov 2004 20:04

Re: AV bei inherited Create;
 
Zitat:

SetLength(Spieler,0);
Spieler[0] := TSpieler.Create;
es sollte SetLength(Spieler,1); heißen, du willst ja ein element haben, spieler[0] ist richtig.
Evtl kommst du hier mit einer objectlist statt einem dyn. array besser.

Mfg Frank

Keldorn 30. Nov 2004 20:05

Re: AV bei inherited Create;
 
Zitat:

SetLength(Spieler,0);
Spieler[0] := TSpieler.Create;
es sollte SetLength(Spieler,1); heißen, du willst ja ein element haben, spieler[0] ist richtig.
Evtl kommst du hier mit einer objectlist statt einem dyn. array besser.

Mfg Frank

glkgereon 30. Nov 2004 20:10

Re: AV bei inherited Create;
 
ich weiss net, so ein fehler muss ja wohl wirklich net sein *den kopf schüttel*

und das SetLength war auch noch falsch...
warum erstelle ich da überhaupt einen Spieler?

das is doch voll der blödsinn :gruebel:


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