Ich grüße euch,
es ist mir zwar peinlich, wegen so einem Anfängermist einen neuen Thread zu eröffnen, aber es muss scheinbar doch sein:
Eine Variable, die ich in einer Include Quelldatei mit Global deklariert habe, kann ich in anderen Includes bzw. in der Hauptdatei nicht verwenden - ist das richtig?
Wenn ja, gibt es da einen Weg drumrum oder muss ich tatsächlich alle Prozeduren, die auf die gleichen Variablen zugreifen, in eine einzige Include setzen?
Ich strukturier meine Arbeit gerne, so dass ich alles wiederfinde und nicht eine einzige ellenlange Quelldatei habe.
Vielen Dank für eure Hilfe!
Global Variablen in Includes
Re: Global Variablen in Includes
Nein, das ist nicht richtig!memdee hat geschrieben:...Eine Variable, die ich in einer Include Quelldatei mit Global deklariert habe, kann ich in anderen Includes bzw. in der Hauptdatei nicht verwenden - ist das richtig?
Du musst Dir nur vorstellen, der Inhalt der einbezogenen Quelle stünde genau an der Stelle, an der der IncludeFile "" - Befehl steht.
Es kommt also nur darauf an, ob der gute Compiler die globale Vereinbarung schon kennt oder eben noch nicht!
Code: Alles auswählen
;- Inhalt von "global_definitions.pbi"
Global gString.s
;------------------------------------------
Code: Alles auswählen
; Main
gString = "erste Nutzung der globalen Variablen gString"
IncludeFile "global_definitions.pbi"
;- das geht schief
;-------------------------------------------
Code: Alles auswählen
; Main
IncludeFile "global_definitions.pbi"
gString = "erste Nutzung der globalen Variablen gString"
;- das geht glatt
Zuletzt geändert von jear am 23.12.2007 21:19, insgesamt 1-mal geändert.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
- memdee
- Beiträge: 134
- Registriert: 09.09.2004 18:49
- Computerausstattung: Win 7 x64
- Wohnort: Wiesbaden
- Kontaktdaten:
Will heißen, eigentlich müsste es gehen?
Ich habe nämlich in einer Include eine Variable Global deklariert und in einer Procedure, die sich in dieser Include befindet, aber in der Hauptquelldatei aufgerufen wird, wird dieser Variable ein anderer Wert zugewiesen.
Wenn ich die Variable aber beispielsweise in einer anderen Include (wiederum in einer Procedure) aufrufe, ist sie immer 0.
edit: Da war einer dazwischen
So steht es bei mir:
Hoffe, mein Problem (das ja eigentlich gar nicht bestehen müsste) wird damit klarer.
Ich habe nämlich in einer Include eine Variable Global deklariert und in einer Procedure, die sich in dieser Include befindet, aber in der Hauptquelldatei aufgerufen wird, wird dieser Variable ein anderer Wert zugewiesen.
Wenn ich die Variable aber beispielsweise in einer anderen Include (wiederum in einer Procedure) aufrufe, ist sie immer 0.
edit: Da war einer dazwischen

So steht es bei mir:
Code: Alles auswählen
main.pb:
IncludeFile "Common.pbi"
IncludeFile "screen.pbi"
IncludeFile "simulation.pbi" ;<--- deklarierung der variablen
InitEngine3D() : InitSprite()
Open_Window_Main() <---erste nutzung der variablen, befindet sich in common.pbi
Code: Alles auswählen
simulation.pbi:
Global year.l, countryname$, countryshort$
Global population.l, pop014.l, pop1560.l, pop61plus.l
Procedure SetupSimulation()
levelfile$="data\levels\lvl1.dat"
OpenFile(0,levelfile$)
year=Val(ReadString(0))
countryname$=ReadString(0)
countryshort$=ReadString(0)
population=Val(ReadString(0))
pop015=Val(ReadString(0))
pop1560=Val(ReadString(0))
pop61plus=Val(ReadString(0))
CloseFile(0)
EndProcedure
meep?
- memdee
- Beiträge: 134
- Registriert: 09.09.2004 18:49
- Computerausstattung: Win 7 x64
- Wohnort: Wiesbaden
- Kontaktdaten:
Ah, ok, jetzt hab ichs...
Das war natürlich tatsächlich das Problem, die Reihenfolge der Includes.
Ich danke euch vielmals, dass ihr mich auf etwas aufmerksam gemacht habt, woran ich eigentlich selber hätte denken müssen
Frohe Weihnachten!
Code: Alles auswählen
IncludeFile "Common.pbi"
IncludeFile "screen.pbi"
IncludeFile "simulation.pbi"
Ich danke euch vielmals, dass ihr mich auf etwas aufmerksam gemacht habt, woran ich eigentlich selber hätte denken müssen

Frohe Weihnachten!
meep?
Das Problem laesst sich auf folgenden Code reduzieren :
Pb parst den Code nur einmal, eine Varible muss also schon ganz "oben"
global gesetzt werden.
Code: Alles auswählen
Procedure test()
Debug a
EndProcedure
Global a = 10
test()
global gesetzt werden.
Code: Alles auswählen
Global a
Procedure test()
Debug a
EndProcedure
a = 10
test()