| Autor |
Beitrag |
hassedelphi
      
Beiträge: 101
WIN XP
D7 Enterprise
|
Verfasst: Mo 11.08.03 17:13
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
_________________ you're not be able to help, that you're an human
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: 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 
      
Beiträge: 101
WIN XP
D7 Enterprise
|
Verfasst: 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.
_________________ you're not be able to help, that you're an human
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: 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
      
Beiträge: 872
Win 8
Delphi 7
|
Verfasst: 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; |
_________________ Hasta La Victoria Siempre
|
|
hassedelphi 
      
Beiträge: 101
WIN XP
D7 Enterprise
|
Verfasst: 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 
_________________ you're not be able to help, that you're an human
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: 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 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
MfG,
Tryer
|
|
hassedelphi 
      
Beiträge: 101
WIN XP
D7 Enterprise
|
Verfasst: Di 12.08.03 09:45
uhu danke, funzt
was is ein OOP?
_________________ you're not be able to help, that you're an human
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: 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 
      
Beiträge: 101
WIN XP
D7 Enterprise
|
Verfasst: Di 12.08.03 11:42
thx 
_________________ you're not be able to help, that you're an human
|
|