AGB  ·  Datenschutz  ·  Impressum  







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

globale Variablen

Ein Thema von lord.paddington · begonnen am 5. Jul 2008 · letzter Beitrag vom 5. Jul 2008
Antwort Antwort
lord.paddington

Registriert seit: 5. Jul 2008
6 Beiträge
 
Delphi 6 Professional
 
#1

globale Variablen

  Alt 5. Jul 2008, 16:27
Hallo!

Habe eine globale Varibale in der Unit Balken erstellt und möchte in der Unit senden auf diese Variable zugreifen.
Leider bekomme ich eine Fehlermeldung und weiß nicht warum...

Delphi-Quellcode:
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons, Balken;
Folgende Felermeldung wird ausgespuckt:
Zitat:
senden.pas(9,18) Fatal: Circular unit reference between senden and Balken
Eigentlich klappte e bisher immer so...was ist falsch?
pfutsch ist hin und hin ist pfutsch
  Mit Zitat antworten Zitat
Benutzerbild von CK_CK
CK_CK

Registriert seit: 31. Aug 2005
Ort: Dortmund, Germany
388 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: globale Variablen

  Alt 5. Jul 2008, 16:32
Du wirst wahrscheinlich in der "Balken"-Unit auf die Unit "Senden" zugreifen und so rufen sie sich gegenseitig auf.
Füg' doch
Delphi-Quellcode:
uses
  Balken;
mal nach dem Wörtchen implementation ein...

Chris
Chris
» «
Mehr von mir (Programme, etc.): http://www.kroegerama.de
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

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

Re: globale Variablen

  Alt 5. Jul 2008, 16:33
Deine Unit Balken benutzt die Unit Senden.
Zwei Units dürfen sich nicht gegenseitig benutzen (zumindest nicht im Interface-Teil).

Das Deutet auf einen Design-Fehler hin. Der Zwang zu einer globalen Variablen übrigens genauso: Sowas sollte man nicht brauchen

Wenn Du aber darauf bestehst eine globale Variable zu benutzen, dann packe die eben in eine dritte Unit (z.B. GlobalVars) und benutze GlobalVars aus Senden und aus Balken. Damit wäre die Zirkuläre Referenz aufgehoben.

Dennoch lohnt es sich bei sowas meist, ein paar Gehirnwindungen in ein Redesign der Anwendung zu stecken. Wenn man sowas braucht hat man meistens schon ein Problem im Design und das macht die Wartung der Software gegen später immer ungeheuer unangenehm und schwierig.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: globale Variablen

  Alt 5. Jul 2008, 16:50
Zitat von Phoenix:
Der Zwang zu einer globalen Variablen übrigens genauso: Sowas sollte man nicht brauchen
Wobei es immer berechtigte Ausnahmen gibt - ich brauche diese schon recht häufig (globale Variable, die Instanzen hält z.B. von "threadsafen" AppEventLogger, Auto-Updater-Instanz, CriticalSections etc.pp)

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
lord.paddington

Registriert seit: 5. Jul 2008
6 Beiträge
 
Delphi 6 Professional
 
#5

Re: globale Variablen

  Alt 5. Jul 2008, 16:52
Volltreffer!


Danke!!!


Warum sind globale Variablen so verpönt???
Habe ich bis heute nicht begriffen!!
pfutsch ist hin und hin ist pfutsch
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: globale Variablen

  Alt 5. Jul 2008, 20:48
Moin lord.paddgington,

Zitat von lord.paddington:
Warum sind globale Variablen so verpönt???
Weil diese von jeder beliebigen Stelle des Programmes aus geändert werden können, was zu unangenehmen Seiteneffekten, in Form von Fehlern führen kann.
Einer Stelle des Programmes wird, unter Umständen, ein erforderliche Wert überschrieben, und man erhält ein unerwartetes Verhalten.

Wenn ich denn mal eine globale Variable benötige, bekommt diese immer den Prefix G, damit immer schnell deutlich wird, dass es sich hier um eine solche handelt, und diese mit besonderer Vorsicht behandelt werden muss.
I.d.R. werden die dann aber auch nur beim Programmstart initialisiert (Abschnitt Initialization), und anschliessend, eigentlich, nur noch gelesen, wie, z.B., DecimalSeparator in der Unit SysUtils. Das ist auch eine globale Variable.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
lord.paddington

Registriert seit: 5. Jul 2008
6 Beiträge
 
Delphi 6 Professional
 
#7

Re: globale Variablen

  Alt 5. Jul 2008, 22:46
Danke für die Antwort!
Klingt alles sehr plausibel!

Werde versuchen, zukünftig darauf zu achten, sehr sparsam mit globalen Variablen umzugehen!


Schönes WE
pfutsch ist hin und hin ist pfutsch
  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 16:23 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