Funktionen & Array & Byref

Previous topic - Next topic

WPShadow

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.
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Tiuz

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.

Quentin

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?
`

Schranz0r

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.
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Code (glbasic) Select
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...
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Schranz0r

öhmm dir werden ja mit zeiger übergeben, aber zeiger + zeiger = Mag GLB nicht ^^
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Quentin

Schranzor das meinte ich ja. Arrays werden immer als Referenz übergeben, ohne daß man BYREF angibt ;)

D2O

Ö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.

Code (glbasic) Select
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
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Schranz0r

Hmmm... interessanter Lösungsvorschlag!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Die Lösung ist super! Klemme mich gleich mal dahinter! Danke...
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est