AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Externe Deklaration von Klassen

Ein Thema von FrEEzE2046 · begonnen am 16. Dez 2009 · letzter Beitrag vom 26. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
FrEEzE2046

Registriert seit: 25. Aug 2009
27 Beiträge
 
#1

Externe Deklaration von Klassen

  Alt 16. Dez 2009, 15:07
Hallo,

ich habe ein (in Delphi) aufwändiges Problem. Und zwar:

Delphi-Quellcode:
//Unit1:

uses Unit2;

TKlasseA = class(TObject)
     KlasseB : TKlasse B;
end;


//Unit2:

TKlasseB = class(TObject)
     Parent : PKlasseA;
end;

So, wie man sieht brauche ich in Klasse B einen Pointer auf seinen Parent. Es ist keine Option (für mich) beides in eine Unit zu packen. Da hat man natürlich die Möglichkeit, sowas per Forward-Deklaration zu lösen.

Wenn ich Unit1 in Unit2 im Interface einbinde, dann hab ich natürlich eine Überkreuzung drin. Ich muss doch irgendwie eine Extern-Deklaration machen können, um dem Compiler zu sagen, dass da etwas existiert, was später noch dem Linker mitgeteilt wird.

Besteht evtl die Möglichkeit den Code nur zu kompilieren und später zu linken?
Ich hoffe ihr könnt mir weiterhelfen.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Externe Deklaration von Klassen

  Alt 16. Dez 2009, 15:13
Zitat von FrEEzE2046:
Ich muss doch irgendwie eine Extern-Deklaration machen können, um dem Compiler zu sagen, dass da etwas existiert, was später noch dem Linker mitgeteilt wird.
Ja. innerhalb einer Unit geht das mit einer Forward-deklaration. Aber da du ja sagtest
Zitat von FrEEzE2046:
Es ist keine Option (für mich) beides in eine Unit zu packen.
gibt es keine Möglichkeit.

Zitat von FrEEzE2046:
Ich muss doch irgendwie eine Extern-Deklaration machen können, um dem Compiler zu sagen, dass da etwas existiert, was später noch dem Linker mitgeteilt wird.
Besteht evtl die Möglichkeit den Code nur zu kompilieren und später zu linken?
Nein, das geht nicht - Delphi hat einen Single-pass-Compiler.

Einzige Lösung ist: Überwinde deinen Ordnungsdrang und apcke beides in eine Unit. Und wenn du meinst, dass das zu unübersichtlich wird, guck dir mal die VCL-units an
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

Re: Externe Deklaration von Klassen

  Alt 16. Dez 2009, 15:17
Du kannst natürlich acuh nochmal dein Design überdenken: solange TKlasseB nicht auf Parent.KlasseB zugreifen muss, kannst du das Problem mit einer abstrakten TKlasseA lösen.
Uwe Raabe
  Mit Zitat antworten Zitat
FrEEzE2046

Registriert seit: 25. Aug 2009
27 Beiträge
 
#4

Re: Externe Deklaration von Klassen

  Alt 16. Dez 2009, 15:18
Zitat von jfheins:
Nein, das geht nicht - Delphi hat einen Single-pass-Compiler.

Einzige Lösung ist: Überwinde deinen Ordnungsdrang und apcke beides in eine Unit. Und wenn du meinst, dass das zu unübersichtlich wird, guck dir mal die VCL-units an
Das kann doch nicht sein, dass man dem Compiler nicht mal sagen kann, dass er das jetzt einfach mal so kompilieren soll. Es ist sowieso ein Integer-Typ (Pointer) und mehr muss er zu diesem Zeitpunkt überhaupt nicht wissen.

Es wird ihm später ja noch mitgeteilt, was genau TKlasseA für ein Typ ist.


Zitat von Uwe Raabe:
Du kannst natürlich acuh nochmal dein Design überdenken: solange TKlasseB nicht auf Parent.KlasseB zugreifen muss, kannst du das Problem mit einer abstrakten TKlasseA lösen.
Ist mir klar, ich will (nur)dafür aber keine VMT-Table anlegen lassen.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Externe Deklaration von Klassen

  Alt 16. Dez 2009, 15:48
Zitat von FrEEzE2046:
Das kann doch nicht sein, dass man dem Compiler nicht mal sagen kann, dass er das jetzt einfach mal so kompilieren soll. Es ist sowieso ein Integer-Typ (Pointer) und mehr muss er zu diesem Zeitpunkt überhaupt nicht wissen.
Dann nehme doch den Typ TObject. Wenn es sowieso nix anderes ist....
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
FrEEzE2046

Registriert seit: 25. Aug 2009
27 Beiträge
 
#6

Re: Externe Deklaration von Klassen

  Alt 16. Dez 2009, 15:51
Zitat von sirius:
Dann nehme doch den Typ TObject. Wenn es sowieso nix anderes ist....
Nein, ich meinte dass sowieso jedes Objekt ein Integer - da Pointer - ist.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

Re: Externe Deklaration von Klassen

  Alt 16. Dez 2009, 16:25
Zitat von FrEEzE2046:
Das kann doch nicht sein, dass man dem Compiler nicht mal sagen kann, dass er das jetzt einfach mal so kompilieren soll. Es ist sowieso ein Integer-Typ (Pointer) und mehr muss er zu diesem Zeitpunkt überhaupt nicht wissen.
Doch, das kann sein. Innerhalb der selben Unit ist das nicht ganz so streng (man kann Forward-Deklaration benutzen), aber ansonsten muss der Compiler alles bereits kennen, dem er begegnet.

Ach ja, eine Alternative zu "Beides in eine Unit packen" gibt's noch: Benutze C# .net
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#8

Re: Externe Deklaration von Klassen

  Alt 16. Dez 2009, 16:28
Zitat von jfheins:
Ach ja, eine Alternative zu "Beides in eine Unit packen" gibt's noch: Benutze C#
Also dann doch lieber Delphi Prism. Das hat auch einen schönen modernen Multipass-Compiler
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

Re: Externe Deklaration von Klassen

  Alt 16. Dez 2009, 16:54
Zitat von Phoenix:
Also dann doch lieber Delphi Prism. Das hat auch einen schönen modernen Multipass-Compiler
Okay, hab's verallgemeinert
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Externe Deklaration von Klassen

  Alt 26. Sep 2010, 14:13
Bei Prism XE ist genau dieses Beispiel dabei. Ansonsten ist mir aber Delphi "sympatischer".

Ist es denkbar, dass die Embjaner Delphi künftig auf einen Multipasscompiler umstellen?
Die unzulässigen Überkreuz-Bezüge sind m.E. das größte (bzw. einzige) Problem im Delphi.
Oder ist das technisch ausgeschlossen?

Eine entsprechende Möglichkeit würde m.E. VIELES deutlich vereinfachen (möglicher Verzicht auf Typecasts und Events).

(Ich weiß, dass manche Entwickler solche Querbezüge ablehnen, aber man müsste sie ja nicht nutzen.)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz