AGB  ·  Datenschutz  ·  Impressum  







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

F2047 Zirkuläre Unit-Referenz ?

Ein Thema von daredd · begonnen am 24. Nov 2008 · letzter Beitrag vom 28. Nov 2008
Antwort Antwort
Seite 1 von 3  1 23      
daredd

Registriert seit: 2. Apr 2006
433 Beiträge
 
#1

F2047 Zirkuläre Unit-Referenz ?

  Alt 24. Nov 2008, 22:25
Kann mir einer sagen was der Compiler damit meint:

[DCC Fehler] NewClient.pas(7): F2047 Zirkuläre Unit-Referenz auf 'NewClient'


???
THX
---------------------------------------------------------------------------
Mein Vista-Kind bringt frischen Wind

Gruß DaRedd aka The Red Dragon
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 24. Nov 2008, 22:27
du hast halt eine zirkuläre referenz. also... du hast 2 units. du referenzierst in der unit1 unter uses unit2 und in der unit2 in der uses-klausel die unit1, also wie folgt:
Delphi-Quellcode:
// das hier steht in der Unit1.pas
unit Unit1;

uses
  Unit2;

{ ... }

// das hier steht in der Unit2.pas

unit Unit2;

uses
  Unit1;
das darf nicht sein, warum sollte klar sein oder?! was soll der compiler denn machen?! was zuerst einbinden?!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 24. Nov 2008, 22:27
Weil du Unit1 in Unit2 und umgekehrt einbindest. Entweder gemeinsames auslagern oder einmal im Interface und einmal in der Implementierung einbinden
Markus Kinzler
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 24. Nov 2008, 22:30
Solltest du in einer der Units auf Elemente der anderen Unit nur im Implementation-Teil zugreifen kannst du das Problem damit lösen, dass du diese Unit mit uses hinter implementation einbindest.

Noch alles klar?

Gruß oki
42
  Mit Zitat antworten Zitat
daredd

Registriert seit: 2. Apr 2006
433 Beiträge
 
#5

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 24. Nov 2008, 22:32
ah stimmt danke, hab das total vergessen! habe jetzt in der unit2 die unit1 unter implementations als uses, und es geht!
---------------------------------------------------------------------------
Mein Vista-Kind bringt frischen Wind

Gruß DaRedd aka The Red Dragon
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 24. Nov 2008, 23:34
Nur weil etwas geht ist es noch lange nicht sinnvoll.

Die Hinweise, die hier gegeben wurden sind zwar richtig, allerdings nicht sinnvoll.
Solche Zirkelschlüsse sind niemals nötig, wenn man so etwas braucht, hat man etwas grundlegendes falsch gemacht.
  Mit Zitat antworten Zitat
Sven M.

Registriert seit: 21. Okt 2006
Ort: Halle/Saale
106 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 08:57
Könntest du da mal ein Beispiel nennen? Ich meine, ich habe zwar noch nie zirkulär referenziert, wüsste auch nicht, warum man das machen sollte. Interessieren würde mich aber trotzdem, warum man da was "grundlegendes falsch" gemacht hat...
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 10:47
Hallo Sven,

das Problem bei dieser Art der Programmierung ist, dass du ein undurchsichtiges Netz von Verknüpfungen erstellst, das nur sehr schlecht zu testen und zu warten ist. Das Ersetzen einer Unit ist unter Umständen mit Änderungen in mehreren anderen Units verbunden, wodurch sich neue Fehler einschleichen können.

Bei einer streng hierarchischen Struktur kann ein Test des Programms "von unten" erfolgen. Du fängst mit den Units an, die keine Abhängigkeiten besitzen. Nachdem diese Units getestet wurden, kannst du dich den Teilen zuwenden, die die getesteten Units referenzieren. Beim Netz mit zirkulären Referenzen weißt du von keiner Unit, ob sie tatsächlich korrekt arbeitet, weil du das Netz nur als Ganzes testen kannst.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Sven M.

Registriert seit: 21. Okt 2006
Ort: Halle/Saale
106 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 11:48
Hi Hawkeye,
das leuchtet ein. Besten Dank - wieder was gelernt!
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#10

Re: F2047 Zirkuläre Unit-Referenz ?

  Alt 26. Nov 2008, 11:48
Zitat von Sven M.:
Könntest du da mal ein Beispiel nennen? Ich meine, ich habe zwar noch nie zirkulär referenziert, wüsste auch nicht, warum man das machen sollte. Interessieren würde mich aber trotzdem, warum man da was "grundlegendes falsch" gemacht hat...
Beispiel:

Ein Datasource für den Datenbankzugriff

Ein Datasource für Reportfunktionen.
Die Reportfunktionen benötigen Connection aus Datasource.

In Datasource wird lediglich ein Zeiger auf den Report declariert, also

Report : TReport;

Ziel ist es von der Datenbankschicht Initialisierungen im Reportteil vornehmen zu können.

Schon hat man ein zirkulären Bezug.

In Net (auch Oxygene) geht so etwas.
Die Ursache das das in Delphi nicht geht, ist der altmodische Einpasscompiler, der solche Bezüge nicht auflösen kann.

Gruß Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 17:28 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