![]() |
Fehler: Variable "self" inaccessible due to optimi
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:
Er zeigt keine Fehler mehr an oder so, ein Test-Programm läuft auch, aber spätestens bei der Pop-funktion gibts Ärger.
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; 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 |
Re: Fehler: Variable "self" inaccessible due to op
Zitat:
Zitat:
Zitat:
|
Re: Fehler: Variable "self" inaccessible due to op
Zitat:
Zitat:
Und was du damit meinst, dass ich zwei Einträge erstelle, verstehe ich leider nicht. Meinst du New(x) und dann element.naechst:=x? Sorry :roll: Und das mit dem Self hab ich einigermaßen verstanden aber die Fehlermeldung versteh ich trotzdem nicht. In der Delphi-Hilfe hört sich das für mich so an, als ob da einer Variable ein Wert zugewiesen wird der aber gar nicht verwendet wird... was daran so schlimm ist (sicher, effizient ist es nicht) versteh ich aber nicht... Trotzdem schonmal vielen, vielen Dank :) |
Re: Fehler: Variable "self" inaccessible due to op
Da es sich ja allem Anschein nach um eine doppelt verkettete Liste handelt, verweise ich mal auf das entsprechende
![]() |
Re: Fehler: Variable "self" inaccessible due to op
Dankeschön.
Jetzt klappts. Allerdings waren im Tuturial auch ein paar Schreibfehler, und die doppelt verkettete Liste wollte bei mir (auch nicht bei direktem Copy&Paste) einfach nicht funktionieren. Hab es jetzt auf eine einfach verkettete Liste reduziert und es klappt. Dankeschön :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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 by Thomas Breitkreuz