Seltsames Problem mit include

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

danibert

Betreff: Seltsames Problem mit include

BeitragFr, Mai 07, 2010 11:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

die Oberfläche meiner Anwendung kann auf deutsch oder englich angezeigt werden. Hierzu setze ich eine Variable für die Sprache und binde ein Sprachpaket mit den Ausgabetexten ein.
Code: [AUSKLAPPEN]
' Hauptfenster
Import maxgui.drivers
Strict

Local language:Int = 1                   ' Sprache festlegen: 1=deutsch, 2=englisch
Include "languagePack.bmx"

Local mainWindow:TGadget=CreateWindow("ProgressBar-Beispiel", 40,40,400,400)
Local helpCloseButton:TGadget=CreateButton(btnClose,20,20,80,20, mainWindow)

Repeat
   WaitEvent()
      Select EventID()
      
         Case EVENT_WINDOWCLOSE
            Select EventSource()
            Case mainWindow
               End
            End Select            
      End Select
Forever
End

Code: [AUSKLAPPEN]
' languagePack.bmx
If language = 1 Then
      Local  btnClose:String = "Schließen"
Else If language = 2 Then
      Local  btnClose:String = "Close"
EndIf


Beim Kompilieren bekomme ich einen Fehler. Wenn ich nun aber Local btnClose:String = "Schließen" ausserhalb der If-Abfrage setze (aber innerhalb der eingebundenen Datei), funktioniert alles perfekt. Ich stehe wohl auf dem Schlauch, warum das nicht funktioniert.
Danke für alle Tipps
  • Zuletzt bearbeitet von danibert am Fr, Mai 07, 2010 18:53, insgesamt einmal bearbeitet
 

danibert

BeitragFr, Mai 07, 2010 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
GELÖST.
So funktioniert´s:
Code: [AUSKLAPPEN]
' languagePack.bmx
Local btnClose:String
If language = 1 Then
      btnClose = "Schließen"
Else If language = 2 Then
      btnClose = "Close"
EndIf

Progger93

BeitragFr, Mai 07, 2010 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Jede Variable existiert in BlitzMax, wie auch bei den meisten anderen Hochsprachen, nur in ihrem "Sichtbarkeitsbereich" (Scope). Wenn du die Variable also innerhabl der Bedingung deklarierst existiert diese nur bis zum "EndIf". Das gleiche passiert auch in Funktionen/Methoden, wobei diese zusätzlich nur die globalen Variablen des Hauptprogramms mitnutzen können. Korrigiert mich wenn ich falsch liege Rolling Eyes
MfG Pascal
Win 7|T7250@2.0Ghz|3GB RAM|M8600GT
 

Ava

Gast

BeitragFr, Mai 07, 2010 15:33
Antworten mit Zitat
*korrigier* Es können immer die Globalen aller übergeordneten Scopes genutzt werden, nicht nur die im Root.

Beispiel:
BlitzMax: [AUSKLAPPEN]

Function Blah ( )

Global BlahString:String = "Test"

Blup ( )

Function Blub ( )

Print ( BlahString )

EndFunction

EndFunction


Was mich bei diesem Beispiel ärgert ist, dass man nicht von aussen auf die Variablen zugreifen kann... Sad
BlitzMax: [AUSKLAPPEN]
Print ( Blah.BlahString ) ' klappt nicht :-(

ChaosCoder

BeitragFr, Mai 07, 2010 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, das wär ja auch größter mist, wenn das gehen würde, Ava.
Eine Funktion ist doch kein Objekt einer Klasse.

BlitzMax: [AUSKLAPPEN]
Function Blah ( lol:String )

Global BlahString:String = "Test"+lol

Blub ( )

Function Blub ( )

Print ( BlahString )

EndFunction

EndFunction


Und jetzt stell dir mal vor, du könntest einfach so auf die inneren Variablen einer Funktion zu greifen.

Mal davon abgesehen existiert die Variable ja eh nur solange, wie Blah() ausgeführt wird, also relativ unsinnig darafu von außen zugreifen zu wollen. Wink
Projekte: Geolaria | aNemy
Webseite: chaosspace.de
 

Ava

Gast

BeitragFr, Mai 07, 2010 18:37
Antworten mit Zitat
Das stimmt so nicht, Andy. Die Globale der Funktion existiert nicht nur so lang, wie die Funktion ausgeführt wird.

Dein Beispiel funktioniert zb. nur beim ersten Aufruf korrekt, da die Globale bei weiteren Aufrufen erhalten bleibt und die Zuweisung nicht erneut aufgerufen wird. Wink

Ich nutze ziemlich häufig globale Variablen innerhalb von Funktionen, um dort Zustände über mehrere Aufrufe hinweg festzuhalten ( in den Fällen, wo eine Objekt-Funktion noch zu übertrieben wäre ).

Damit Dein Beispiel korrekt funktioniert, müsste es so aussehen:
BlitzMax: [AUSKLAPPEN]
Function Blah ( lol:String )

Global BlahString:String

BlahString = "Test" + lol

Blub ( )

Function Blub ( )

Print ( BlahString )

EndFunction

EndFunction

FireballFlame

BeitragSa, Mai 08, 2010 3:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Globals in Funktionen? Funktionen in Funktionen?? Shocked
Ich wusste noch garnicht, dass das geht...
Das wär was für diesen Thread Smile
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group