Hallo Leute, ich bin's mal wieder, erstmal einen schönen Samstag Abend. Kann mir jemand sagen warum ich in der DIM Zeile immer eine Fehlermeldung bekomme
STARTDATA daten:
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
ENDDATA
DIM n1$[20], n2$[20], n3$[20], n4$[20], n5$[20], n6$[20], n7$[20]
//
RESTORE daten
FOR i = 1 TO 19
READ n1$[i], n2$[i], n3$[i], n4$[i], n5$[i], n6$[i], n7$[i]
NEXT
Ich wäre für eine Antwort dankbar. Habe schon verschiedene Variationen durch. Keine funzt. Bitte nicht auf die Daten eingehen, habe ich nur so angelegt. Die Füllung dürfte der VAR ja egal sein.
GLBasic allows you to use variables without declaring before like in classic BASIC, but you must to see if you have the option activated. Uncheck the setting "Explicit declarations" in Project > Options in the menu, to disable the mandatory variable declarations.
If you want to use variable declarations, you must to to insert this line before the DIM line.
GLOBAL n1$[], n2$[], n3$[], n4$[], n5$[], n6$[], n7$[]
Das ist es leider auch nicht, habe alles umgestellt, bekomme immer noch die Fehlermeldung. :'(
GLOBAL n1$[], n2$[], n3$[], n4$[], n5$[], n6$[], n7$[]
DIM n1$[20], n2$[20], n3$[20], n4$[20], n5$[20], n6$[20], n7$[20]
//
RESTORE daten
FOR i = 1 TO 19
READ n1$[i], n2$[i], n3$[i], n4$[i], n5$[i], n6$[i], n7$[i]
NEXT
//
STARTDATA daten:
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
DATA "Klaus","Meyer","Oldenburg","April","Mann","65","grün"
ENDDATA
//
RESTORE daten
FOR i = 1 TO 19
READ n1$[i], n2$[i], n3$[i], n4$[i], n5$[i], n6$[i], n7$[i]
NEXT
Explicit declarations ist an. Bekomme immer noch die Fehlermeldung
*** Configuration: WIN32 ***
precompiling:
GPC - GLBasic Precompiler V.9.829 SN:e2471947 - 3D, NET
"test.gbas"(9) error : syntax error
Zeile 9 ist die Zeile mit der DIM Anweisung. Habe einpaar REM's rausgeschmissen.
GLOBAL n1$[], n2$[], n3$[], n4$[], n5$[], n6$[], n7$[]
DIM n1$[20]
DIM n2$[20]
DIM n3$[20]
DIM n4$[20]
DIM n5$[20]
DIM n6$[20]
DIM n7$[20]
So gehts! Btw.:
FOR i = 1 TO 19
READ n1$[i], n2$[i], n3$[i], n4$[i], n5$[i], n6$[i], n7$[i]
NEXT
sollte sein:
FOR i = 0 TO 19 // 20 Durchläufe
READ n1$[i], n2$[i], n3$[i], n4$[i], n5$[i], n6$[i], n7$[i]
NEXT
Hai, vielen dank SchranzOr. So Funzt es, ich dachte ich könnte alle DIM's, oder mehrere, in eine Zeile schreiben. Nochmals Danke. Sag mal kann ich die Warnings vernachlässigen?
"xxxx.gbas"(40) warning : variable already exists : plan$
Davon habe ich für jede VAR eine.
Du kannst DIMs in eine Zeile schreiben, sparst dadurch aber keine Zeichen ein (im Gegensatz zu LOCALs etc), sondern lediglich etwas Platz:
DIM n1$[20]; DIM n2$[20]
; hat den gleichen Effekt wie ein Zeilenumbruch, könntest also im Extremfall sogar dein ganzes Spiel in einer Zeile schreiben. :D
Die Warnung sagt nichts anderes aus, als dass du eine Variable mehrmals definierst, ist hast also vermutlich zwei GLOABLs für eine Variable, oder zwei LOCALs im gleichen Programmteil. Übrigens Definiert FOR i% die Variable i% (oder wie auch immer du sie nennst), hat also den gleichen Effekt als würde dort ein LOCAL i% stehen, die Variable ist für die gesamte FOR Schleife definiert, danach und davor nicht. In den meisten Fällen ist eine erneute Definition bedeutungslos und es hat keinen Einfluss wenn du sie ignorierst - es kann aber ein paar Sonderfälle geben, wo es einen Unterschied macht, wenn du dir dann angewöhnst Sie einfach zu ignorieren (was eben meist gut geht, aber nicht immer), findest du das Problem nicht. Daher empfehle ich, die Warnungen loszuwerden indem du die zweite Definition löscht, ist wohl in deinem Fall nicht nötig, aber perspektivisch besser so.
Eigentlich habe ich nur einmal Global und einmal DIM für jede VAR. :S
Quote from: Worebu on 2013-Jun-29
Hai, vielen dank SchranzOr. So Funzt es, ich dachte ich könnte alle DIM's, oder mehrere, in eine Zeile schreiben. Nochmals Danke. Sag mal kann ich die Warnings vernachlässigen?
"xxxx.gbas"(40) warning : variable already exists : plan$
Davon habe ich für jede VAR eine.
Hört sich nach "doppeldekleration" an, bitte mal den Code schicken.
Quote from: Worebu on 2013-Jun-29
"xxxx.gbas"(40) warning : variable already exists : plan$
Perhaps you made a DIM in a SUB of FUNCTION and it's called more than once.
In this case, use REDIM instead.
Das ist richtig, die GLOBAL Anweisung mache ich in einer SUB, und die DIM ist in einer anderen. Aber auch wenn ich GLOBAL und DIM zusammen in einer SUB habe kommt die Medlung. Mit REDIM ändert sich auch nichts. Mit REDIM kommt noch zusätzlich die Meldung:
"xxxx.gbas"(27) error : variable is not explicitly defined : plan$
If you need to call many times the GLOBAL declaration, is better to put outside all the SUBs and FUNCTIONS. This way is available to all the program (it's a global). This code works without warning messages.
' call many times to test
GOSUB test
GOSUB test
END
' declare global vars
GLOBAL n1$[], n2$[], n3$[], n4$[], n5$[], n6$[], n7$[]
SUB test:
' each dim in one separate instruction
DIM n1$[20]; DIM n2$[20]; DIM n3$[20]; DIM n4$[20]
DIM n5$[20]; DIM n6$[20]; DIM n7$[20]
n1$[0] = "aa" ' to use some variable
ENDSUB
Ich für meinen Teil habe mir folgenden Programmierstil angewöhnt:
// Definition aller Variablen, Types usw. die ich benötige, die global gesetzt werden müssen
TYPE beispiel_type
x
y
ENDTYPE
// Dieser Block ist meistens größer
GLOBAL beispiel AS beispiel_type, test$
GLOBAL test_2[]
// Danach folgt erst der Code, die Funktionen, Subs, usw.
main()
FUNCTION main:
beispiel.x = 7
PRINT beispiel.x, 0, 0
SHOWSCREEN
KEYWAIT
END
ENDFUNCTION
Hi, jetzt habe ich es raus =D.
Ich habe die GLOBALs direkt vor den Hauptprogrammteil gesetzt.
Globals also aus einer SUB genommen und jetzt gehts ohne Warnings und Errors. Es war also kein doppelter Aufruf oder eine doppelte Deklaration.
THX an alle. Danke für die Antstösse und Hilfe :good:
SETCURRENTDIR("Media") // go to media files
SETTRANSPARENCY RGB(255,0,128)
SETSCREEN 1680,1050,1
//
GLOBAL n1$[]
GLOBAL n2$[]
GLOBAL n3$[]
//
//
GOSUB init
GOSUB gfx
GOSUB startscreen
GOSUB daten
LOADBMP "bground.bmp"
//
main: // Hier startet das Programm
//
MOUSESTATE mx,my,b1,b2 // VAR
PRINT "MX:"+ mx, 350, 980 // Kontrollausgabe X, wo ist die Maus ?
PRINT "MY:"+ my, 650, 980 // Kontrollausgabe Y, wo ist die Maus ?
//
PRINT n1$[3], 500,500 // Testausgabe von n1$
SHOWSCREEN
GOTO main // ... und hier ist es zuende