Type-Fehlermeldung

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Klip

Betreff: Type-Fehlermeldung

BeitragFr, Okt 28, 2005 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

      SetColor 200,0,150
      For Global my_enemy:enemy = EachIn enemy_list
         DrawOval(my_enemy.x,my_enemy.y,my_enemy.size,my_enemy.size)
         my_enemy.x:+ my_enemy.xspeed
         my_enemy.y:+ my_enemy.yspeed
         
         If my_enemy.x > gfx_width Or my_enemy.x < 0 Then my_enemy.xspeed:* (-1)
         If my_enemy.y > gfx_height Or my_enemy.y < 0 Then my_enemy.yspeed:* (-1)
      Next


Wenn ich dies innerhalb meiner Hauptschleife einbinde, dann sagt er mir an der Stelle der For-Schleife, dass er eine Expression erwartet, aber nur Global bekommt.

Nehme ich das Global weg, dann sagt er: "Identifier my_enemy not found!"

Woran liegt das? Habe exakt ein Tutorial nachgebaut, aber es funktioniert trotzdem nicht.
 

gamble

BeitragFr, Okt 28, 2005 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst das Global durch ein Local ersetzen, dann funktioniert es Wink

Klip

BeitragFr, Okt 28, 2005 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Tatsächlich, danke.

Kannst du mir erklären, wieso das so ist? Ist es denn in dem Falle nicht egal, ob ich globale oder lokale Variablen nehme? Wenn schon, dann hätte ich akzeptiert, dass es global sein muss, aber lokal?

Ist das eine ungeschriebene Regel oder liegt das an dem Code an sich?
 

gamble

BeitragFr, Okt 28, 2005 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum das so ist, weiß ich nicht. Falls Du die Variable unbedingt Global haben willst, kannst Du sie auch vorher definieren.

Code: [AUSKLAPPEN]

Global my_enemy:enemy

For my_enemy = EachIn enemy_list

' ...

Next

Klip

BeitragFr, Okt 28, 2005 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, das hatte nicht geklappt, mit dem vorher definieren.

Da meinte er auch, er erwartet eine Expression, deswegen wundere ich mich ja auch so.
 

Dreamora

BeitragFr, Okt 28, 2005 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Die lokale Deklaration dient hauptsächlich dem Zweck die von C her stammenden "Deklarationsorgien" für Schleifenzähler los zu werden, indem man dem Programmierer in Strict die Möglichkeit gibt eine Zählervariable lokal im Schleifenkopf zu deklarieren.
Denn sonst müsste man in Strict vorher alle variablen deklarieren, selbst wenn man sie nur für diese eine Schleife zum "durchzählen" braucht was die Lesbarkeit und Verständlichkeit von Code senken kann.

Das macht für globale Variablen jedoch wenig Sinn, denn wenn man sie global hat, will man sie ja auch anderweitig noch nutzen, also sollte man sie auch ordnungsgemäss definieren (und BM erzwingt das glücklicherweise auch), damit man ihre Deklaration später überhaupt wieder findet.


Deine letzte Version ginge auch, wenn du my_enemy vorher mittels global my_enemy:enemy deklarierst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Klip

BeitragSa, Okt 29, 2005 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, okay, dankeschön. Stimmt, das ergibt Sinn.

Ich lasse es aber lieber so lokal in der Schleife drin, da mein Code jetzt nicht so lange ist (ist ein sehr simples Programm zum Einstieg und üben).
 

Dreamora

BeitragSa, Okt 29, 2005 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du es sonst nicht brauchst sondern nur für die Schleife ist das auch sehr ratsam, da Local schneller ist als Global
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group