Seite 1 von 1

Aufruf Array funktioniert nicht

Verfasst: 26.04.2006 15:58
von dibro
Hi,
ich hab mir neu PB4.0 gezogen und direkt ein Problem:

Code: Alles auswählen

Structure WkstDaten
Name.s
Dichte.f
SpezWid.f
SpezW.f
EndStructure


Dim Mat.WkstDaten(5)
;
Mat(0)\Name 		= "3020"  : Mat(0)\Dichte 	= 7.9 : Mat(0)\SpezWid = 1.04 : Mat(0)\SpezW 	= 0.5
;
;

; Aufruf in einer Procedur
.....
SetGadgetText(#String_Dichte,StrF(Mat.WkstDaten(GetGadgetState(#Combo_Wkst))\Dichte,3))
.....
Der Compiler meldet: Mat() is Not a function,array Or linked list

unter 3.94 läuft das. Ist das ein Bug oder nur eine neue Syntax

Verfasst: 26.04.2006 16:04
von DarkDragon
Global Dim ;-) Lies mal die Änderungen.

Verfasst: 26.04.2006 18:51
von dibro
in welchen Änderungen?
In der Hilfe zu 4.0 steht
Arrays in PureBasic sind immer global verfügbar. Dies bedeutet, dass auf sie auch aus Prozeduren heraus zugegriffen werden kann, ohne die Befehle Global oder Shared aufrufen zu müssen.
Und in der Readme, die mit dem Download kommt heißt es
; Array
;
;

Dim Array.Point(10, 15)

Array(0,0)\x = 1
Array(1,0)\x = 2

Procedure TestIt(c.l, ParameterArray.Point(2))

ParameterArray(1, 2)\x = 3
ParameterArray(2, 2)\x = 4

EndProcedure

TestIt(10, array())

MessageRequester("Array", Str(array(1, 2)\x))
Nix Global Dim
Möglicherweise noch nicht korrigiert ?

Verfasst: 26.04.2006 19:05
von MVXA

Code: Alles auswählen

; Array
;
;

Global Dim Array.Point(10, 15)

Array(0,0)\x = 1
Array(1,0)\x = 2

Procedure TestIt(c.l, ParameterArray.Point(2))

ParameterArray(1, 2)\x = 3
ParameterArray(2, 2)\x = 4

EndProcedure

TestIt(10, array())

MessageRequester("Array", Str(array(1, 2)\x)) 
Doch global, funzt hier

Verfasst: 26.04.2006 19:16
von dibro
na klar funzt das, wenn man das weiß.
Aber bisher und auch noch in der Hilfe und Readme ist das Global nicht erforderlich. Umkehrschluss: Wenn Arrays nicht mehr global sind, müsste man sie auch in Proceduren lokal anlegen können, und das wäre neu.
Ist das beabsichtigt?
:cry:
Nachtrag:
Ich hab da was übersehen, das Array ist in dem Beispiel als Parameter an die Funktion übergeben worden, deshalb wohl Global hier nicht erforderlich, die Procedur lernt es ja erst durch die Übergabe kennen.
Dann ist nur der Hilfetext noch nicht up to date.
Mit Newlist scheint es so ähnlich zu sein.

Verfasst: 26.04.2006 19:25
von PMV
dibro hat geschrieben:na klar funzt das, wenn man das weiß.
Aber bisher und auch noch in der Hilfe und Readme ist das Global nicht erforderlich. Umkehrschluss: Wenn Arrays nicht mehr global sind, müsste man sie auch in Proceduren lokal anlegen können, und das wäre neu.
Ist das beabsichtigt?
Das ist sogar sinn und zweck das ganzen

Gillt im übrigen auch für Linked Lists ...
Ich hab grad mal die Hilfe der PB 4.0 Beta 11 angeschaut, da steht es
unter Dim : ReDim richtig erklärt, solltest dir vielleicht mal die aktuellsten
Dateien besorgen :wink:

MFG PMV

Verfasst: 26.04.2006 19:31
von MVXA
sollte ma endlich aufhören so schnell zu sein und erstmal den Code lesen
bevor ich ihn ausführe..