![]() |
Klassen Forward Problem
Hallo,
ich habe derzeit das Problem das ich eine Unit voller Objekte habe. Oben habe ich eine Liste mit den Objekten. Die sieht so aus
Delphi-Quellcode:
und jetzt ist das problem das ich TInterface von TRootObj ableiten möchte.
TContentItem = class;
... = class; TInterface = class; .................= class; .................= class; TRegOperations = class; TRootObj = class; TServerFileItem = class; TServerInterface = class; TSynchronizer = class; Da aber in der reihenfolge zum zeitpunkt von TInterface - TRootobj noch nicht bekannt ist sagt er mir das ich TRootObj nicht ausreichend deklariert habe. ich kann ich jetzt vor TInterface einen Forward anbringen auf die TRootObj Klasse? TRootObj = class forward; funktioniert nicht. wenn mir da jemand schnell helfen könnte wäre das sehr hilfreich |
Re: Klassen Forward Problem
Eigentlich ganz einfach:
Delphi-Quellcode:
...:cat:...
type
TSpaeter = class; TJetzt = class public FSpaeter: TSpeater; end; TSpaeter = class public procedure HelloWorld; end; |
Re: Klassen Forward Problem
nein ihc habe oben eine alphabetisch sortierte Objekt liste
und darunter in der ordnung die ausgeschriebenen objekte. und das soll auch so bleiben |
Re: Klassen Forward Problem
Entwerder wie von sakura vorgeschlagen - oder gar nicht. Wenn du keine Forwarddeklarationen haben willst, nimm einen C-Sprache ;)
|
Re: Klassen Forward Problem
Zitat:
Und zwar mit Hilfe von Interfaces bzw. abstrakten Klassen. Bei dem Ansatz ist es weniger schlimm, dass du bei so vielen Kreuzverweisen alles in eine Unit quetschen musst. Interfaces haben nunmal keine Implementierung ;) Aber ein langsamer und fummeliger Prozess wird es auf jeden Fall werden. :? Zitat:
|
Re: Klassen Forward Problem
Zitat:
Zitat:
Wenn du von ein paar deiner Klassen den Interface teil rausrückst, wäre die Chance relativ hoch, dass ich Lust verspüren könnte dir ein paar Beispiele zu geben. (man beachte den Konjunkiv :mrgreen: ) Man gewinnt immens an Übersicht und löst die selbst auferlegten Fesseln, wenn man Klassen nicht so fest miteinander verbindet. Über Interfaces lässt sich diese Entkoppelung auflockern/lösen und dass in 90% aller Fälle ohne auch nur einen einzigen Typecast zu brauchen. ;) Das hier gilt unverändert weiterhin... Zitat:
|
Re: Klassen Forward Problem
hm den interface teil möchtest du nicht haben,
der ist recht laaaanng. desweiteren denke ich darf ich es bestimmt auch nicht da dies ein praktikums projekt von mir ist. im endeffekt hilft das auch nicht. ich glaube auhc das ihr nicht richtig verstanden habt vieleicht wegen meiner schlechten formulierung was ich meinte. ein beispiel ist ich habe ein Objekt -darin befindet sich ein eigenes tnotify -und dieses TMyNotify muss ja jetzt vor dem objket im interface deklariert sein sonst sagt der compiler findet er nicht. -so jetzt will ich aber da bei mir das sich um ein objekt handelt anstatt des TMyNotify Types das ich dieses Objekt trotzdem darunter pack.
Delphi-Quellcode:
da ich ja eine alphabetische ordnung bei den objekten
TMyNotify = procedure(Bla : string) of object;
TBla = class private protected public property MyNotify : TMyNotify read ... write ... end; //HIER HIN besitze und zwecks code sauberkeit auch berhalten möchte. das hieße man müßte irgentwie forwarden. bei routinen gehts wohl so
Delphi-Quellcode:
wenn ich jetzt mein objekt darunter aufbau wo ich diese routine benutze dann
procedure bla; forward;
ist sie ihm bekannt auch wenn sie erst nach dem objekt nocheinmal richtig aufgeführt ist. und so möchte ich das halt mit objekten.
Delphi-Quellcode:
hier sieht man jetzt durch die alphabetische ordnung
TAlpah = class(TBeta)
... end; TBeta = class ... end; kommt alpah zuerst obwohl es von TBeta abgeleitet ist. und diese konstruktion macht auch im compiler probleme da zum zeitpunkt wo er über TAlpha läuft er TBeta noch garnicht kennt. somit müßte man das ja so in etwa machen.
Delphi-Quellcode:
hatte dieses problem noch niemand?
TBeta forward;
TAlpah = class(TBeta) ... end; TBeta = class ... end; [edit=alcaeus]Delphi-Tags an mehreren Stellen eingefuegt. Beim naechsten Mal bitte selbst machen. Mfg, alcaeus[/edit] |
Re: Klassen Forward Problem
Also, es geht so:
Delphi-Quellcode:
Oder du verzichtest einfach auf eine alphabetische Sortierung ...
TBeta = class;
TAlpha = class Data2: TBeta; end; TBeta = class Data: Integer; end; :wall: |
Re: Klassen Forward Problem
hm das ist ja das problem solch eine objektliste
hab ich ja davor
Delphi-Quellcode:
die die ich angegeben hatte am anfang und dennoch kommt das
TContentItem = class;
... = class; TInterface = class; .................= class; .................= class; TRegOperations = class; TRootObj = class; TServerFileItem = class; TServerInterface = class; TSynchronizer = class; problem. |
Re: Klassen Forward Problem
Hallo MasterBB,
hier mal das, was ich auf die Schnelle rausgefunden habe. Hier mal ein Beispiel das nicht funktioniert (D7):
Delphi-Quellcode:
Der Fehler "Class TBar is not yet completely defined" tritt in der markierten Zeile auf. Ich kann es mir nur damit erklaeren, dass ich nicht von einer nicht vollstaendig deklarierten Klasse ableiten kann. Dieses Beispiel funtioniert naemlich:
TBar = class;
TFoo = class; TFoo = class(TBar) //<-- Fehler hier end; TBar = class(TObject) FFoo: TFoo; end;
Delphi-Quellcode:
Wiederum sind die Klassen alphabetisch forward-deklariert, aber die engueltige Deklarationsreihenfolge ist umgekehrt. Versuch das mal zu beruecksichtigen. Du musst auch bei der endgueltigen Deklaration eine gewisse Reihenfolge einhalten, aber ich wuerde versuchen es so zu machen, dass ich keine forward declares brauche :wall:
TBar = class;
TFoo = class; TBar = class(TObject) FFoo: TFoo; end; TFoo = class(TBar) end; Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 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