![]() |
Delphi-Version: 5
Binärer Baum mit Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Hey,
ich soll einen binären Baum mithilfe einer Klasse erstellen. Jedoch sind meine Methoden (vor allem (bzw glaube nur) beim löschen) verbuggt. Wenn ich schnell irgendwas eingebe, dies dann lösche kommt manchmal eine Fehlermeldung (z.B. Ungültige Zeigeroperation), jedoch kann ich dies nicht hilfreich nachstellen, sodass ich sehe an welcher Stelle genau was falsch ist (wenn ich es langsam und überlegt löscht, kommt kein Fehler). Oo Kann mir bitte jemand helfen oder einen Tipp geben? :) Vielen Dank LG ford42 |
AW: Binärer Baum mit Klasse
Zitat:
Ein weiterer Design-Fehler ist das Ansprechen des aktuellen Formulars innerhalb Deiner Klasse, z.B. hier:
Code:
Die Ausgabe der Daten über das Formular hat in der Klasse nichts zu suchen. Eventuell könnte man an die Klasse ein Element des Formulars als Parameter übergeben; so wie Du es gemacht hast, ist es leider sehr unübersichtlich, fehleranfällig und nicht leicht auf andere Probleme (oder Formulare) anpassbar.
constructor TNodeTest.Create;
begin inherited; //hierdurch wird der ursprüngliche Konstruktor aufgerufen Form4.RE_Status.SelAttributes.Color := clGreen; Form4.RE_Status.Lines.Add('$' + IntToStr(Integer(self)) + ' wurde erstellt'); Form4.RE_Status.SelAttributes.Color := clBlack; Inc(Form4.NodeI); end; Überlege Dir einfach einmal, was Du alles ändern müsstest, wenn der Baum auf einem anderen Formular laufen soll... ub60 |
AW: Binärer Baum mit Klasse
Ja, da hast du Recht.
Das ist (vor allem) so unübersichtlich geworden, da ich es davor mit records und Pointer gemacht habe und es dann zu ner Klasse umwandeln sollte.... Aber dann bau ich es mal um (da deine Argumente, vor allem dein letztes (anderes Formular) natürlich Sinn ergeben! :) |
AW: Binärer Baum mit Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Ich scheiter gerade an den Klassenmethoden.
Also ich muss ja z.B. class procedure Einfuegen(eingabe: String) als Klassenmethode defenieren (da es ja nur einmal vorkommen darf) oder? Und wie kann ich die dann in der Unit für die Gui aufrufen? :o Dankeschön LG ford42 |
AW: Binärer Baum mit Klasse
Zitat:
Klassenmethoden operieren auf der Klasse und haben daher nur Zugriff auf allgemeine Dinge und andere Klassenmethoden und Klassenvariablen. Aber nicht auf normale Felder einer Objektinstanz, auf denen normale Methoden operieren. Eine Methode wie "Einfügen" ist mit ziemlicher Sicherheit keine Klassenmethode, sondern eine normale, da du dir sonst die Möglichkeit versperrst, mehrere Objekte (Instanzen) dieser Klasse zu haben, die unterschiedliche Werte eingefügt bekommen können. Deine aktuelle Deklaration von TNodeTest scheint mir also ziemlich falsch. Mach mal überall das "class" Präfix weg. Übrigens:
Delphi-Quellcode:
// statt:
class var NodeI: Integer; class var wAendern: Integer; class var PWurzelNode: TNodeTest; class var PStandNode: TNodeTest; class var PParentNode: TNodeTest; // geht auch einfach: class var NodeI: Integer; wAendern: Integer; PWurzelNode: TNodeTest; PStandNode: TNodeTest; PParentNode: TNodeTest; // und statt if PWurzelNode <> nil then // kann man auch schreiben if Assigned(PWurzelNode) then // ist absolut gleichwertig, Assigned() testet auf <> nil, nur damit du es mal gesehen hast |
AW: Binärer Baum mit Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Danke, das war mir so nicht klar. Ich habe es davor anders verstanden. :angel2:
Der Tipp mit Assigned ist auch sehr hilfreich, da es Tipparbeit erspart. :D Würdet ihr jetzt noch was ändern, oder passt es soweit? :) |
AW: Binärer Baum mit Klasse
Zitat:
Hast Du noch Form4 in der Klasse. Char 'r' und 'l' ??? Warum Class var... Sollte man - bis auf wenige stellen - drauf verzichten. " if Form4.Loeschen('alles') then " Sorry aber den Code kann man kaum lesen! |
AW: Binärer Baum mit Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Erstmal dankeschön. :)
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Kann mir da bitte jemand weiterhelfen/einen Tipp geben? :) Zitat:
Dankeschön :) EDIT: Die LoescheUndFuegeEin-Methode war bei der vorherigen verbuggt |
AW: Binärer Baum mit Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Um sowas wie "Rechts" und "Links" zu speichern nimm einen eigenen Typen...
Delphi-Quellcode:
Es ist im Zip Nie die Datei BaumklasseUnit.dfm dabei... Daher kann man es nicht testen - jedenfalls nicht so einfach
Type
TLaufrichtung = (lrKeine,lrRechts,lrLinks); |
AW: Binärer Baum mit Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Ok dankeschön.
Habs nun mit dem Typen gemacht. :) Und nun ists auch mit der BaumklasseUnit.dfm verpackt. :D LG ford42 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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-2025 by Thomas Breitkreuz