Hi!
Hab ein kleines Problem zu lösen und keinen Plan wie!
Ich möchte aus einer Funktion mehrere Arrays RETURNen. Mit BYREF funktioniert es nicht und auch sonst hab ich noch leider keine Lösung gefunden.
Was tun? Wie könnte ich das lösen? Ich würde nämlich gerne mehrere Arrays auf einmal übergeben!?!
Gruß
W.
Hallo,
Arrays als Argumente von Funktionen werden standardmäßig BYREF übergeben.
Glbasic ist da sehr frei, es ist egal ob ein oder mehrere Arrays als Input oder Output dienen, ob sie schon allokiert sind oder nicht etc..
Was genau geht denn nicht ?
Tiuz.
Arrays werden immer BYREF übergeben, also ohne explizite Angabe von BYREF ;)), sollten auch mehrere übergeben werden können.
wie sieht dein Problem denn konkret aus?
`
Falsch Quentin :)
Es können keine Arrays/Felder übergeben werden mit BYREF, siehe Hilfe:
QuoteFelder werden immer als Referenz übergeben. Hier ist ein BYREF obsolet.
LOCAL PosX[], PosY[]
DIM PosX[10]
DIM PosY[10]
Machwas(PosX[], PosY[])
WHILE TRUE
PRINT PosX[0] + " " + PosY[0], 10, 10
SHOWSCREEN
WEND
END
CALLBACK FUNCTION Machwas: BYREF x[], BYREF y[]
DIM x[10]
DIM y[10]
x[0] = 100
y[0] = 200
ENDFUNCTION
So inetwa dachte ich es mir, aber so funktioniert es nunmal nicht. Ansonsten hätte man den Zeiger von dem einen Feld einfach aufs andere Feld legen können. So zumindest meine Erklärung für das Problem...
öhmm dir werden ja mit zeiger übergeben, aber zeiger + zeiger = Mag GLB nicht ^^
Schranzor das meinte ich ja. Arrays werden immer als Referenz übergeben, ohne daß man BYREF angibt ;)
Öhmm,
Du möchtest also das mehere Array's ein Function übergeben werden, die intern berarbeitet werden und dann wieder mehrere Array's zurück geben,
richtig?
Warum benutzt Du nicht Types?
Hier kannst Du Arrays, "Normale" Variablen, Strings übergeben bzw. zurück geben und das alles in einem Rutsch.
ay = 10
by = 10
cy = 10
GLOBAL array AS Tarray
REDIM array.a[10]
REDIM array.b[10]
REDIM array.c[10]
count = 0
FOR i = 0 TO 9
array.a[i] = count
array.b[i] = count
array.c[i] = count
INC count,1
NEXT
array = uparray(array)
FOR i = 0 TO 9
PRINT array.a[i],10,ay+(i*10)
PRINT array.b[i],50,by+(i*10)
PRINT array.c[i],90,cy+(i*10)
NEXT
SHOWSCREEN
KEYWAIT
FUNCTION uparray AS Tarray: l_in AS Tarray
FOR i = 0 TO 9
l_in.a[i] = l_in.a[i]+100
l_in.b[i] = l_in.b[i]+200
l_in.c[i] = l_in.c[i]+300
NEXT
RETURN l_in
ENDFUNCTION
TYPE Tarray
a[0]
b[0]
c[0]
ENDTYPE
Hmmm... interessanter Lösungsvorschlag!
Die Lösung ist super! Klemme mich gleich mal dahinter! Danke...