#1 22.06.2012 13:06:07

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

circular reference

Ich glaube, das ist so ein Klassiker unter den Problemen, vielleicht kann mir da jemand weiterhelfen, wie ich das am besten auflöse:

Code: delphi

unit1;
interface
  uses unit2;

  type
    typausunit1 = record
    ....
    end;

  var
    a: typausunit2;


unit2;
interface
  uses unit1;

  type
    typausunit2 = record
      b: typausunit1;
      ...
    end;


Das führt zum Problem im Thema, falls ich nichts vergessen hab. Wahrscheinlich müsste ich TypAusUnit1 mit in die 2. Unit hineinpacken. Das würde ich allerdings sehr ungern machen, da dieser Typ noch an anderen Stellen verwandt wird, und Unit1 für mich sowas wie die Typen-Deklarations-Unit darstellt.

Die Delphi-Hilfe hat nur den sinnlosen Tipp, eines der beiden Dinge in den implementation-Bereich zu packen.

Danke

DerPeer

Offline

 

#2 22.06.2012 23:18:43

DragonFlyOfGold
ProMember
Ort: Berlin
Registriert: 09.11.2005
Beiträge: 139

Re: circular reference

Hiho,

ja die zirkulären Referenzen sind schon Fluch und Segen in Delphi gleichermaßen. Viele andere Sprache unterstützen sie und doch ist der Code meist aufgeräumter und strukturierter wenn man drauf verzichtet.
So, jetzt mal zu deinem Problem:
1. Frage: Warum deklarierst du eine Variable des Typs "typausunit2" in Unit1 und nicht Unit2? Angenommen Unit2 soll eine reine Typenunit sein, wäre es dann nicht sinnvoll eine dritte Unit (Unit3) anzulegen und in dieser a: typausunit2; zu deklarieren?
2. Frage: Warum nutzt du nur Records? Wenn es jetzt gerade nur an dem Beispiel liegt, habe ich nichts gesagt. Ansonsten lege ich dir sehr ans Herz so schnell wie möglich auf Klassen umzusteigen!

So freu mich auf deine Antworten ... bis dahin DfoG

Offline

 

#3 24.06.2012 19:13:01

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Re: circular reference

zu 1.: Weil in Unit1 diese Variable in Prozeduren benutzt wird. Aber ich sehe schon, das ist kein Argument. Denn sie würde trotzdem in der Unit1 bekannt sein, wenn ich sie in Unit2 deklarierte.

zu 2. Jaja, ich steig ja gerade um. Nennen wir es Tradition ;-) (In Wahrheit ist es Furcht vor dem Unbekannten bzw. Gewohnheit)

Ich glaube, du hast das Problem schon gelöst, danke :-)

DerPeer

Offline

 

#4 24.06.2012 23:31:08

Carsten
ProMember
Ort: Braunschweig
Registriert: 05.01.2006
Beiträge: 220
Web-Seite

Re: circular reference

versuch mal folgende Änderung, Carsten:

unit1;

interface
//  uses unit2;

  type
    typausunit1 = record
    ....
    end;

  uses unit2;

  var
    a: typausunit2;

Beitrag geändert von Carsten (24.06.2012 23:32:21)

Offline

 

#5 25.06.2012 08:35:26

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Re: circular reference

Tut mir leid, aber das mag Delphi nicht. "Declaration expected but 'USES' found".

Eine gute Struktur löst das Problem vermutlich.

Offline

 

#6 27.06.2012 21:10:43

Carsten
ProMember
Ort: Braunschweig
Registriert: 05.01.2006
Beiträge: 220
Web-Seite

Re: circular reference

ah, sorry, das muß nach dem implementation-Abschnitt.

Also schreib implemetation vor das uses.

Carsten

Offline

 

#7 29.06.2012 11:08:26

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Re: circular reference

Wow! Man kann auch Variablen nach "implementation" deklarieren! Das wusste ich ja noch gar nicht :-)

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson