![]() |
Forward Deklaration von Klassen
Hallo allerseits,
ich habe folgendes Problem unter Delphi 7: ich möchte innerhalb einer Unit eine ganze Latte von Klassen definieren, die jeweils Objekte von andren Klassen als property haben. Um das ganze übersichtlicher zu gestalten, möchte ich Forward Deklarationen der Klassen einbauen, damit diese auch ganz oben bereits bekannt sind. Aber egal, was ich mache, Delphi beschwert sich immer bei mir, dass ich die Klassen redefinieren würde, mache ich irgendwas falsch? Hier ein Beispiel wie ich vorgehe. Es wird von Delphi so leider nicht akzeptiert (besagte Fehlermeldung) und ich weiß nicht warum:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TKlasse2 = class(TObject); TKlasse3 = class(TObject); TKlasse1 = class(TObject) private FObjekt2: TKlasse2; public property Objekt2: TKlasse2 read FObjekt2 write FObjekt2; end; TKlasse2 = class(TObject) private FObjekt3: TKlasse3; public property Objekt3: TKlasse3 read FObjekt3 write FObjekt3; end; TKlasse3 = class(TObject) private FTest1: String; FTest3: String; FTest2: String; public property Test1: String read FTest1 write FTest1; property Test2: String read FTest2 write FTest2; property Test3: String read FTest3 write FTest3; end; implementation end. |
Re: Forward Deklaration von Klassen
Lass "(TObject)" weg. Eine Forward Deklaration lautet einfach nur
Delphi-Quellcode:
type
TDeineKlasse = class; |
Re: Forward Deklaration von Klassen
Auch schon probiert!
[Fehler] Unit1.pas(10): Typ 'TMeineKlasse' ist nicht vollständig definiert |
Re: Forward Deklaration von Klassen
Zitat:
|
Re: Forward Deklaration von Klassen
Da muss ich dich leider enttäuschen, das habe ich nämlich nicht!
Kann es evtl. an irgendeinem Schalter im Delphi 7 liegen, dass es keine Forward Deklarationen annimmt?!? |
Re: Forward Deklaration von Klassen
Nein, kann es nicht. Es ist ein Standard und funktioniert seit mindestens D4 und ich kenne keinen Schalter der dieses Sprachfeature auch nur bedingt beeinflusst. Ich nutze es seit Jahren und es kan noch lange so weiter gehen.
Grundlegend: Code wurde oben gegeben. Grundlegende Regeln: 1. Wenn du eine Forward Deklaration machst, muss diese Klasse auch in dem selben Type-Block deklariert werden. (also kein erneuter "Type") 2. Keine Angabe von der Basisklasse in der Forwarddeklaration. Einfach nur "class;" 3. Eine Forwarddeklaration muss auch in der Unit (und selben Type, siehe 1.) deklariert werden. Vielleicht steht ja noch ein Buchstabe o.ä. rechts im nicht sichtbaren Bereich (weggescrollt?) |
Re: Forward Deklaration von Klassen
Das:
Delphi-Quellcode:
funktioniert bei mir (und vermutlich in allen Delphi-Versionen seit Neunzehnhundertfeuerzeug :-D).
type
TDebugActionForm = class; //forward TDebugAction = class private FForm: TDebugActionForm; end; TDebugActionForm = class(TForm) // schnipp end; |
Re: Forward Deklaration von Klassen
hallo,
zwischen der Forward Deklaration und der eigentlichen Deklaration darf das type nicht mehr auftauchen. sonst gibt es die Meldung! Fehlermeldung selektieren und F1 drücken soll auch helfen!
Delphi-Quellcode:
type // 1
TABC = class; TABC = class FABC : integer; end; type // 3 TDEF = class; // <--- hier Fehlermeldung type // 4 // wegen "type" TDEF = class FABC : integer; end; mfg derDan |
Re: Forward Deklaration von Klassen
OK, ich habe nun den "Fehler" gefunden. Man muss natürlich auch die Unit "Classes" einbinden, sonst geht das ganze nicht. In meinem Beispiel war sie bereits eingebunden, weil ich einfach eine neue Anwendung erzeugt habe und die Unit1 dann abgeändert. In meiner richtigen Anwendung, wo dann der Fehler
Delphi-Quellcode:
kam, hatte ich die entsprechende Unit per "Datei --> Neu" erzeugt und da sind logischerweise noch keinerlei Unit-includes vorhanden.
Typ 'TMeineKlasse' ist nicht vollständig definiert
|
Re: Forward Deklaration von Klassen
ARGH, wieder falsch, es lag doch tatsächlich nur an dem zweiten "type", wie von DerDan richtig erkannt.
:duck: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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 by Thomas Breitkreuz