AGB  ·  Datenschutz  ·  Impressum  







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

Klassen Forward Problem

Ein Thema von Master_BB · begonnen am 3. Jun 2005 · letzter Beitrag vom 5. Jun 2005
Antwort Antwort
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#1

Klassen Forward Problem

  Alt 3. Jun 2005, 13:41
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:
  TContentItem = class;
  ... = class;
  TInterface = class;
  .................= class;
  .................= class;
  TRegOperations = class;
  TRootObj = class;
  TServerFileItem = class;
  TServerInterface = class;
  TSynchronizer = class;
und jetzt ist das problem das ich TInterface von TRootObj ableiten möchte.
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
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Klassen Forward Problem

  Alt 3. Jun 2005, 14:19
Eigentlich ganz einfach:
Delphi-Quellcode:
type
  TSpaeter = class;

  TJetzt = class
  public
    FSpaeter: TSpeater;
  end;

  TSpaeter = class
  public
    procedure HelloWorld;
  end;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#3

Re: Klassen Forward Problem

  Alt 3. Jun 2005, 15:59
nein ihc habe oben eine alphabetisch sortierte Objekt liste
und darunter in der ordnung die ausgeschriebenen objekte.
und das soll auch so bleiben
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Klassen Forward Problem

  Alt 3. Jun 2005, 16:05
Entwerder wie von sakura vorgeschlagen - oder gar nicht. Wenn du keine Forwarddeklarationen haben willst, nimm einen C-Sprache
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Klassen Forward Problem

  Alt 3. Jun 2005, 19:33
Zitat von Dax:
Entwerder wie von sakura vorgeschlagen - oder gar nicht.
Es geht auch ohne dass man sich 5 mio Zeilen in einer Unit antut.
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 von Dax:
Wenn du keine Forwarddeklarationen haben willst, nimm einen C-Sprache
Es gibt auch ein Pascal mit einem modernen Compiler.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Klassen Forward Problem

  Alt 4. Jun 2005, 23:34
Zitat von Master_BB:
nein ihc habe oben eine alphabetisch sortierte Objekt liste
und darunter in der ordnung die ausgeschriebenen objekte.
Objekte oder Klassen?
Zitat von Master_BB:
und das soll auch so bleiben
Bist du dir da sicher?
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 )
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 von Robert_G:
Aber ein langsamer und fummeliger Prozess wird es auf jeden Fall werden.
...aber vielleicht wird es mit etwas Anfahrhilfe weniger fummelig und schneller?
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#7

Re: Klassen Forward Problem

  Alt 5. Jun 2005, 09:27
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:
TMyNotify = procedure(Bla : string) of object;

TBla = class
private
protected
public
  property MyNotify : TMyNotify read ... write ...
end;

//HIER HIN
da ich ja eine alphabetische ordnung bei den objekten
besitze und zwecks code sauberkeit auch berhalten möchte.
das hieße man müßte irgentwie forwarden.
bei routinen gehts wohl so

procedure bla; forward; wenn ich jetzt mein objekt darunter aufbau wo ich diese routine benutze dann
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:
TAlpah = class(TBeta)
...
end;

TBeta = class
...
end;
hier sieht man jetzt durch die alphabetische ordnung
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:
TBeta forward;

TAlpah = class(TBeta)
...
end;

TBeta = class
...
end;
hatte dieses problem noch niemand?

[edit=alcaeus]Delphi-Tags an mehreren Stellen eingefuegt. Beim naechsten Mal bitte selbst machen. Mfg, alcaeus[/edit]
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

Re: Klassen Forward Problem

  Alt 5. Jun 2005, 09:34
Also, es geht so:
Delphi-Quellcode:
  TBeta = class;

  TAlpha = class
    Data2: TBeta;
  end;

  TBeta = class
    Data: Integer;
  end;
Oder du verzichtest einfach auf eine alphabetische Sortierung ...

  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#9

Re: Klassen Forward Problem

  Alt 5. Jun 2005, 10:25
hm das ist ja das problem solch eine objektliste
hab ich ja davor

Delphi-Quellcode:
TContentItem = class;
  ... = class;
  TInterface = class;
  .................= class;
  .................= class;
  TRegOperations = class;
  TRootObj = class;
  TServerFileItem = class;
  TServerInterface = class;
  TSynchronizer = class;
die die ich angegeben hatte am anfang und dennoch kommt das
problem.
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: Klassen Forward Problem

  Alt 5. Jun 2005, 10:42
Hallo MasterBB,

hier mal das, was ich auf die Schnelle rausgefunden habe. Hier mal ein Beispiel das nicht funktioniert (D7):
Delphi-Quellcode:
TBar = class;
TFoo = class;

TFoo = class(TBar) //<-- Fehler hier
end;

TBar = class(TObject)
   FFoo: TFoo;
end;
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:

Delphi-Quellcode:
TBar = class;
TFoo = class;

TBar = class(TObject)
   FFoo: TFoo;
end;

TFoo = class(TBar)
end;
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

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:30 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