Locale arrays

Previous topic - Next topic

WPShadow

Hi!

Ich habe da mal eine Frage, auf die ich keine Antwort weiß: Wie kann ich die Pointer eines array - Feldes umlegen?

Die Idee ist ein Feld (nennen wir es a$[]) mit einer Bestimmten Größe in einer Funktion zu erzeugen, Daten zuzuweisen und von Außen einfach ein anderes, gleich großes Feld per BYREF darauf zeigen zu lassen. Habe ich da jetzt einen Denkfehler oder dürfte das so funktionieren? Wenn ich es auf die Art nämlich versuche,  bekomme ich immer bloß dies:

Code (glbasic) Select


In file included from C:\DOKUME~1\Cammy\LOKALE~1\Temp\glbasic\gpc_tempg.cpp:2:
C:\DOKUME~1\Cammy\LOKALE~1\Temp\glbasic\gpc_temp.h:9: error: `Anything' was not declared in this scope
In file included from C:\DOKUME~1\Cammy\LOKALE~1\Temp\glbasic\gpc_temp0.cpp:1:
C:\DOKUME~1\Cammy\LOKALE~1\Temp\glbasic\gpc_temp.h:9: error: `Anything' was not declared in this scope
C:\DOKUME~1\Cammy\LOKALE~1\Temp\glbasic\gpc_temp0.cpp:45: error: redefinition of `DGInt __GLBASIC__::init_pics'
C:\DOKUME~1\Cammy\LOKALE~1\Temp\glbasic\gpc_temp.h:9: error: `DGInt __GLBASIC__::init_pics' previously defined here
C:\DOKUME~1\Cammy\LOKALE~1\Temp\glbasic\gpc_temp0.cpp:45: error: `Anything' was not declared in this scope
In file included from C:\DOKUME~1\Cammy\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:1:
C:\DOKUME~1\Cammy\LOKALE~1\Temp\glbasic\gpc_temp.h:9: error: `Anything' was not declared in this scope



Wobei mir bis jetzt noch nicht klar ist, was es mit 'Anything' auf sich hat...

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

Kitty Hello

Sag mal was Du wirklich machen willst, dann gibt's auch eine Lösung.

WPShadow

Ok, das ist ziemlich simpel:

Ich möchte meine Daten (für die GUI) aus der Datenbank laden. Die Daten beinhalten hauptsächlich Zahlen, die die Größe der einzelnen Elemente angeben. Diese hole ich mir in einen 2 dimensionalen Array (Button[window][element]), wodurch ich beim initialisieren gleich alle Fensterbereiche für das gesamte Spiel geladen habe. Danach gebe ich bloß noch an, welches Fenster gezeigt werden soll und alle Elemente werden korrekt dargestellt.

Ich habe das Ganze schon als fixen Block abgefaßt, den ich direkt in die einzelnen Funktionen kopiert habe und das funktionierte nicht schlecht. Aber ich hätte das gerne alles in lokalen Variablen abgefaßt. Die schwierigkeit ist dabei, daß ich die einzelnen Elemente nun an die 'main' <- Funktion übergeben muß und von dort aus an die einzelnen Fenster weiter. Beim letzten Versuch scheiterte alles daran, daß ich diese Elemente global gesetzt habe und sie sich angefangen haben irgendwann selbst zu überschreiben. Und gerade das möchte ich vermeiden.

Deshalb auch den ganzen Array lokal in eine Funktion und einfach alles übergeben, so gut es geht. Aber so richtig habe ich das bisher noch nicht hinbekommen. Deshalb dachte ich auch daran, das Ganze per BYREF zu lösen, aber das wollte irgendwie auch noch so, wie ich es mir grundlegend dachte.
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

Kitty Hello

ich versteh's nicht ganz. aber ein Feld als Parameter ist immer BYREF:

Code (glbasic) Select


LOCAL arr[]

fill(arr[])


FUNCTION fill: a[]
LOCAL f[]
   DIMDATA f[], 1,2,3,4,5
   a[] = f[]
ENDFUNCTION

WPShadow

Das war genau das, was ich wissen wollte. Nun noch eine Frage:

Wo genau definiere ich den Bereich für die Arrays (DIM a$[])??? Die muß ich normalerweise sowohl in der "Main", als auch in der "fill" - Funktino anlegen, oder?
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

DIMDATA macht das DIM für dich ;)
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

Kleiner Tip: Wenn ich die DB verwende und 2500 Datensätze einlesen will, dann werde ich wohl kaum DIMDATA verwenden können,oder?  =D
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

Quentin

*rofl*
manchmal ist es echt nicht leicht, deinen Gedankengängen zu folgen, WP, nichts für ungut ;)

"Main" ist ja auch "nur" eine Funktion. Wieso erstellst du dein Array nicht LOCAL in "Main" und übergibst es als Parameter an deine Lesefunktion oder was auch immer?

WPShadow

hehehe

Keine Sorge, das Problem ist jetzt ansich schon gelöst. Ich werde noch bis ca. Ende September brauche, bis ich euch zeigen kann, wieso ich so doof gefragt habe, aber dann klärt sich das alles von selbst. Versprochen!

Danke inzwischen. Ich denke, diesmal hab ich's kapiert!!!
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

Wenn die Größe nicht fest ist, mach einfach REDIM wenn du noch was hinzufügen willst ;)
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