Einzelnen Beitrag anzeigen

TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#1

constructor access violation

  Alt 13. Nov 2005, 12:16
Ich komme einfach nicht weiter.

Ich habe eine Klasse TKarte, die so aussieht:

unit UKarte;

Delphi-Quellcode:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls;

type
   TTest = CLASS

     public
        constructor init(pFrage, pAntwort: string);
        //und weitere...
   end;

implementation

var

Frage,
Antwort:String;

constructor TKarte.init(pFrage, pAntwort: string);
begin
inherited;
//self.schreibeAntwort(pAntwort);
//self.schreibeFrage(pFrage)
end;

//...
end.

Ich erstelle sie so:

Delphi-Quellcode:
procedure TKarteikasten.Laden (name: String);
var i,j: integer;
    karte1: TKarte;
    fach: TFach;
    aktDatensatz: KartenTyp;
begin
  showMessage('laden');
  Liste:=TList.create;
  AssignFile(datei, name);
  if FileExists(name) then begin showMessage('existiert, öffnen'); ReSet(datei) end
  else begin ReWrite(datei); showMessage('existiert nicht, neu erstellen') end;

  for i:=0 to filesize(datei)-1 do
  begin
        seek(datei,i);
        read(datei,aktDatensatz);
        showmessage(aktdatensatz.antwort);
        showmessage(aktdatensatz.frage);
        showmessage(inttostr(aktdatensatz.fach)); //wird noch ausgegeben
        karte1.init(aktDatensatz.frage,aktDatensatz.antwort); //HIER!!!!
        //mit karte1.init('test','test'); das gleiche, liegt also nicht an den Parametern
        showmessage('so far...'); //wird nicht mehr ausgegeben, Access Violation
        if aktDatensatz.fach>Liste.count-1 then
        begin
                for j:=liste.count-1 to aktdatensatz.fach do begin
                Fach:=TFach.create;
                Liste.add(Fach);
                end;
        end;
        TFach(Liste[aktDatensatz.fach]).fuegeKartehinzu(karte1);

  end;
end;
Wie in den Kommentaren geschildert, wird bis vorher alles ausgeführt, aber beim Erstellen kommt eine Access Violation.


Folgende Methode funktioniert allerdings einwand frei:

Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var karte1:Tkarte;
begin
karte1.init('asdf','asddf');
end;
Daraus habe ich zunächst geschloßen, dass es an der Methode laden liegt, aber ich könnte mir nicht vorstellen woran es liegt.

Wäre für Hilfe echt dankbar...

/edit: titel geändert
  Mit Zitat antworten Zitat