Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Variablen in mehreren Units verwenden
hassedelphi - Mo 11.08.03 17:13
Titel: Variablen in mehreren Units verwenden
hi
meine unit ist voll mit unübersichtlichem qtext. also hab ich ein bisschen davon in eine neue Unit gehaun. problem: die variablen:
| Zitat: |
| [Fehler] Unit2.pas(9): Undefinierter Bezeichner: 'Tm2' |
hab's mit uses Unit1 versucht (einmal nach interface, einmal nach implementation), funzt aber nicht
kann jmd helfen? :?!?: auch weitere ideen qt auszulagern sind nicht unerwünscht
Moderiert von
Tino: Titel geändert & Topic verschoben
Tryer - Mo 11.08.03 17:20
Wäre vielleicht ganz handlich wenn man ein paar mehr Infos hätte:
Wo ist Tm2 deklariert, und wo wird es benutzt ?
MfG,
Tryer
hassedelphi - Mo 11.08.03 17:59
wird mitten in einer ganz normalen procedur benutzt (selbst erstellt) (unit2) und dann über meinetwegen showmessage ausgegeben (unit1);
ist als globale variable deklariert, und wird über ein editfeld initialisiert.
Tryer - Mo 11.08.03 18:12
Wenn Du Unit1 im implementation-Abschnitt in Unit2 einbindest und Tm2 dann nicht bekannt ist kann die Variable nicht global in Unit1 deklariert sein, das würde sonst funktionieren.
MfG,
Tryer
Terra23 - Mo 11.08.03 18:36
@Hassedelphi: Schau nochmal in deiner Unit 1 nach. Alle Variablen, die nach der Einbindung von Unit1 in Unit2 nitzen willst,
müssen global definiert sein und weiterhin würde ich nun an deiner Stelle in Zukunft von vornherein versuchen, meinen Quelltext so leserlich wie möglich zu halten bzw. durch Kommentare & Anmerkungen leserlich zu machen, z.B.:
Delphi-Quelltext
1: 2: 3: 4:
| Form1.Button1Click(Sender: TObject); begin ShowMessage('Ich habe jetzt den Knopf gedrückt. Bin ich nicht gut?!?'); end; |
hassedelphi - Di 12.08.03 08:00
die variable ist global
unit1
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var Form1: TForm1;
implementation VAR s,sum,mode : integer; cfe,T1,cfl,cgas,m,Tv,Ts,qs,qv : array [1..8] of real; Tm1,Tm2,Tm3,Tm4,Tm5,Tm6,Tm7,Tm8,me : real; w : integer; k : array [1..8] of integer; |
unit2
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| unit Unit2;
interface
implementation uses unit1;
procedure test; begin Tm2:=Tm3; end;
end. |
das ganze funzt aber immer noch nich :x
Tryer - Di 12.08.03 08:41
Interface = Schnittstelle nach draussen
Deine vermeindlich globalen Variablen sind also wirklich keine sondern nur innerhalb der Unit1 zugänglich.
Vielleicht tät ein Blick in die Hilfe ganz gut bzgl. der verschiedenen Unit-Abschnitte.
Ein Blick
hierdrauf [
http://www.grundlagen.delphi-source.de/styleguide/index.shtml] könnte auch nicht schaden.
Wenn ich deinen QT so anschaue weis ich warum ich nicht viel von globalen Variablen halte und lieber OOP betreibe :autsch:
MfG,
Tryer
hassedelphi - Di 12.08.03 09:45
uhu danke, funzt :D :D
was is ein OOP?
Tryer - Di 12.08.03 10:32
Objekt Orientierte Programmierung
Heißt:
Statt einfache globale Variablen zu nehmen die zu jedem Zeitpunkt aus beliebigen Units überschrieben werden können erstelle ich mir lieber Objekt-Instanzen bei denen der Zugriff auf die Felder über Methoden und Eigenschaften kontrollierbar ist.
Gleichzeitig erreicht man damit eine deutlich bessere Strukturierung des QT´s, da logische Teilbereiche sich in eigenen Klassen abgrenzen lassen.
Sicher gibt es einige Variablen die global sein müssen (z.B. HInstance), das ist aber äusserst selten der Fall.
Der grösste Vorteil der OOP ist die Möglichkeit der Vererbung, d.h. Klassen mit ähnlichen Funktionen erben von einer Vorfahr-Klasse die bereits alle Gemeinsamkeiten der späteren Derivate implementiert.
Die vererbten Klassen implementieren dann nur einige wenige neue Methoden oder überschreiben virtuelle/abstrakte Methoden der Basisklasse um die Funktionsweise an den benötigten "Spezialfall" anzupassen.
Die OOP zwingt zu etwas abstrakterem Denken, sorgt dann aber für eine Strukturierung und Übersichtlickeit des QT die sich mit globalen Variablen einfach nicht erreichen läßt.
Nochmal: verboten sind globale Variablen nicht - manchmal sogar unumgänglich, aber wenn möglich sollte man imo darauf verzichten.
MfG,
Tryer
hassedelphi - Di 12.08.03 11:42
thx :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!