Variable must be a type?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Variable must be a type?

BeitragFr, Jul 31, 2009 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo an alle...

Ich hab im Forum zwar schon Fragen zu dem Fehler gefunden, aber bei mir scheints was ganz anderes zu sein.

Also, weil mich jemand um Hilfe gefragt hat weil er bei seinem SnakeKlon nicht weiter kam, habe ich jetzt Lust gehabt selbst einen zu programmieren.
Ich arbeite mit types und bekomme jetzt den Fehler der in der Überschrift steht.

Der Type sieht so aus:

Code: [AUSKLAPPEN]
Type TKopf
   Field Kx#
   Field Ky#
   Field Geschwindigkeit#
End Type


Der Kopf wird hier initialisiert:

Code: [AUSKLAPPEN]
Kopf.TKopf = New TKopf
   Kopf\Kx# = GraphicsWidth()/2
   Kopf\Ky# = GraphicsHeight()/2
   Kopf\Geschwindigkeit# = 2


Und hier tritt der Fehler auf:

Code: [AUSKLAPPEN]
If KeyHit(200) And Richtung <> Runter Then Richtung = Hoch ;Hoch Steuern
   If KeyHit(208) And Richtung <> Hoch Then Richtung = Runter ;Runter Steuern
   If KeyHit(203) And Richtung <> Rechts Then Richtung = Links ;Links Steuern
   If KeyHit(205) And Richtung <> Links Then Richtung = Rechts ;Rechts Steuern
   
   Select Richtung
   
      Case Hoch
         Kopf\Ky# = Kopf\Ky# - Kopf\Geschwindigkeit#
         
      Case Runter
         Kopf\Ky# = Kopf\Ky# + Kopf\Geschwindigkeit#
         
      Case Rechts
         Kopf\Kx# = Kopf\Kx# + Kopf\Geschwindigkeit#
         
      Case Links
         Kopf\Kx# = Kopf\Kx# - Kopf\Geschwdindigkeit#
         
   End Select


Um genau zu sein setzt er den Cursor (nur den Cursor, markiert wird nichts) in diese Reihe:

Code: [AUSKLAPPEN]
Kopf\Ky# = Kopf\Ky# - Kopf\Geschwindigkeit#



Ich hab schon gesucht ohne Ende in dem Code, aber ich finde den Fehler beim besten Willen nicht.

Wäre echt toll wenn jemand was finden würde, Danke schonmal im Voraus... Lg, M0rgenstern

skey-z

BeitragFr, Jul 31, 2009 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
schau mal hier, da ist ein Schreibfehler, kann ja mal passieren, deshalb würde ich zu kürzeren aber trotzdem Aussagekräftigen variablen raten zB Kopf/speed#, dann sieht man es meistens schneller

Zitat:
Case Links
Kopf\Kx# = Kopf\Kx# - Kopf\Geschwdindigkeit#


Moment, sehe gerade dass der Fehler schon vorher angezeigt wird.

gehst du alle Instanzen mit For...Each durch?
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

M0rgenstern

BeitragFr, Jul 31, 2009 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum denn? Ich habe nur EINEN Kopf... Muss ich dann trotzdem For... Each schreiben?

Lg, M0rgenstern

Nicdel

BeitragFr, Jul 31, 2009 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einem noch nicht bei mehreren schon. Was skey-z grade schrieb wollte ich auch schreiben. Mehr Fehler sind nicht drin.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

M0rgenstern

BeitragFr, Jul 31, 2009 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm... Aber warum zeigt er mir das dann an?

Das macht ja nichts wenn das in ner Funktion steckt normalerweise...

Ich hab jeztt noch das in ner anderen Funktion hinzugefügt (die liegt über der Steuerung) da wirds jetzt auch angezeigt:

Code: [AUSKLAPPEN]
   Oval Kopf\Kx#, Kopf\Ky#,12,10,1


Ich habe für diesen Type nur einen Kopf erstellt.
Ansonsten hab ich noch einen anderen Typ für den Schwanz, davon lasse ich 5 erstellen.


Lg, M0rgenstern...

Nicdel

BeitragFr, Jul 31, 2009 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Für eine Funktion muss Kopf.TKopf natürlich global sein...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

M0rgenstern

BeitragFr, Jul 31, 2009 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
baahh... Ja, danke... Oh man, das is peinlich....

Aber ich hab mal ne Frage, warum ist bb eigentlich so dumm:

Code: [AUSKLAPPEN]
For i=0 To 4 ;Vier Körperteile zu beginn
    Global Teil.TSchwanz = New TSchwanz
      Teil\Sx# = Kopf\Kx# - i;Damit die Schlange nach Westen gerichtet ist
      Teil\Sy# = Kopf\Ky#
Next


wenn ich den Schwanz auch als global deklariere dann sagt er mir global darf nur im Hauptprogramm auftreten... (ich verstehe schon, dass er die Schleife nicht als Hauptprogramm anerkennt) Aber wo wäre das Problem wenn man das als global deklarieren würde? Interessiert mich grade mal.

lg, M0rgenstern

DaysShadow

BeitragFr, Jul 31, 2009 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil Variablen die in einer Schleife erstellt werden am Ende der Schleife wieder entfernt werden, die sind immer Local.
Hat auch nichts damit zu tun dass BB dumm ist oder so, dass ist bei so ziemlich jeder Hochsprache der Fall.

MfG DaysShadow
Blessed is the mind too small for doubt

M0rgenstern

BeitragFr, Jul 31, 2009 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
???
Wäre mir ehrlich gesagt neu, dass die Variablen nach der Schleife wieder entfernt werden... Ich benutz die doch danach noch, oder wie genau meinst du das?

Lg, m0rgenstern

DaysShadow

BeitragFr, Jul 31, 2009 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Variablen die einer Schleife erstellt wurden(was du ja getan hast), werden beim Verlassen der Schleife wieder gelöscht, daher kein Global.
Probiers aus, schreib statt Global mal Local und du wirst die Variable nach der Schleife nicht mehr benutzen können.

MfG DaysShadow
Blessed is the mind too small for doubt

TimBo

BeitragFr, Jul 31, 2009 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube er meinte Functionen
schleifen stimmt nicht

Code: [AUSKLAPPEN]
for i=0 to 1
x=2
next
print x
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

M0rgenstern

BeitragFr, Jul 31, 2009 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm...

Und warum zeigt er den Fehler dann in ner Schleife an?

In Funktionen wäre es mir nämlich klar.

Lg, M0rgenstern

Xeres

Moderator

BeitragFr, Jul 31, 2009 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
...weil DaysShadow prinzipiell recht hat, BlitzBasic sich aber nicht nach diesem Standard richtet. Local benutzen oder Global vor der Schleife verwenden.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

M0rgenstern

BeitragFr, Jul 31, 2009 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, okay... Danke...


Lg, M0rgenstern

TimBo

BeitragFr, Jul 31, 2009 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Type mutter
   Field var
End Type

neuemutter()

m.mutter=First mutter
Print m\var
WaitKey()


Function neuemutter()
   m.mutter=New mutter
   m\var=Rand(0,10)
End Function
bei mehreren types muss das so aussehen

Code: [AUSKLAPPEN]
Type mutter
   Field var
End Type

For i=0 To 10
   neuemutter()
Next



For m.mutter=Each mutter
   Print m\var
Next
WaitKey()


Function neuemutter()
   m.mutter=New mutter
   m\var=Rand(0,10)
End Function


ohne auch nur eine globale ?

Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

DaysShadow

BeitragFr, Jul 31, 2009 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@Xeres: Ja, musste ich leider auch grad feststellen
Tut mir Leid dass ich hier für Verwirrung gesorgt habe...in Bmax ist es jedenfalls so Wink

MfG DaysShadow
Blessed is the mind too small for doubt

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group