Einzelnen Beitrag anzeigen

Pellekaeptn

Registriert seit: 14. Dez 2008
3 Beiträge
 
#1

Fehler: Variable "self" inaccessible due to optimi

  Alt 22. Dez 2008, 17:25
Hallo alle zusammen!

Ich schreib grad mein Infoprojekt mit Delphi 7 und bin am verzweifeln. Ich bin auch nicht so bewandert im Programmieren (aber es macht mir Spaß ), außer in der Schule mach ich da nichts, also entschuldige ich mich jetzt schonmal im Voraus für meine blöden Fragen...

Ein Modul meines Programms ist eine Unit "Keller" (also ein Stack). Leider funktioniert die bei mir gar nicht.
Hier erstmal der Quelltext Push-Funktion:

Delphi-Quellcode:
unit Keller;

interface
type
  ZElement = ^TElement;
  TElement = record
    Daten: string;
    Voriges, Naechstes: ZElement;
  end;

  TKeller = class(TObject)
    public
      constructor Create();
      procedure Push(eintrag: string);
      function Pop(): ZElement;
    private
      Erstes: ZElement;
  end;


implementation

constructor TKeller.Create();
begin
  inherited;
  Erstes := nil;
end;


procedure TKeller.Push(eintrag: string);
var
  X,Y: ZElement; Letztes: ZElement; Element:TElement;
begin
  NEW(X);
  NEW(Y);
  Element.daten:=eintrag;
  Element.Naechstes:=X;
  Element.Voriges:=Y;
  if (Erstes <> nil) then
  begin
    Letztes := Erstes;
    while (Letztes^.Naechstes <> nil) do
      Letztes := Letztes^.Naechstes;
    Letztes^.Naechstes := @Element;
    Element.Naechstes := nil;
    Element.Voriges := Letztes;
  end else
  begin
    Erstes := @Element; //hier ist Element noch zb. ('bla',#ECF45G,#ECF45H)
    Element.Naechstes := nil; //hier auch (außer das neue nil)
    Element.Voriges := nil; //hier auch (außer das neue nil)
  end; //hier ist Element jetzt ('',nil,nil)
end;
Er zeigt keine Fehler mehr an oder so, ein Test-Programm läuft auch, aber spätestens bei der Pop-funktion gibts Ärger.
Ich hab dann mal mit F7 durchgeschaltet und hab ne Watchlist gemacht und bin zu folgender interessanter Sache gekommen: schon beim ersten push (also wenn erstes noch nil ist) passiert etwas Seltsames: wenn man bei "Erstes := @Element;" steht Element noch auf ('eingegebener string, adresse, adresse). Wenn er aber die nächsten 2 Zeilen durchlaufen hat und die beiden Adressen nil sind, hat sich plötzlich auch Element.daten verändert: von einer Zeile zur anderen ist Element plötzlich ('',nil,nil).
Außerdem stand bei der Watchlist auch einmal "Variable "Self" inaccessible here due to optimization". Ich hab doch gar keine Variable Self???

Die Delphi-Hilfe und Forum-Suche haben mir leider gar nicht weitergeholfen, aber schonmal vielen Dank für eure Mühe und Entschuldigung für die dämlichen Fragen und alles

Viele Grüße und einen schönen Abend noch
der Pellekaeptn
  Mit Zitat antworten Zitat