problem mit arrays in prozeduren

Anfängerfragen zum Programmieren mit PureBasic.
bob_grey
Beiträge: 2
Registriert: 11.02.2007 15:33

problem mit arrays in prozeduren

Beitrag von bob_grey »

verknappt lässt sich das problem auf folgendes reduzieren:
ich erstelle ein array, kann aber nicht in der prozedur darauf zugreifen, obwohl ich sie als global deklariert habe

hier als kurzer code zum selber ausprobieren:

Dim array.l (1,2,3)
Global array

Procedure asdf()
array(1,1,1) = 1
EndProcedure

ich hab bisher noch nix bezüglich dieses problems gefunden, vielleicht mach ich auch nur nen anfängerfehler ;)

thia

bob_grey
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Falsche Syntax: Du setzt eine Variable namens "array" auf global anstatt das Array.

Du müsstest Global Dim array.l(1,2,3) schreiben, um das Array auf global zu setzen.

Tipp: Verwende EnableExplicit in PB 4.00 oder höher. In PB 3.94 oder tiefer sind Arrays immer automatisch global.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

AND51 hat geschrieben:In PB 3.94 oder tiefer sind Arrays immer automatisch global.
FALSCH

ich muss bei 3.3 auch immer erst das Array in der Procedure freigeben :

Code: Alles auswählen


Dim array.l(10)

procedure Test()
 shared array
 array(0) = 3
endprocedure

Test()

debug array(0) 
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
bob_grey
Beiträge: 2
Registriert: 11.02.2007 15:33

Beitrag von bob_grey »

thx, jetzt funktionierts
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

STARGÅTE hat geschrieben:
AND51 hat geschrieben:In PB 3.94 oder tiefer sind Arrays immer automatisch global.
FALSCH

ich muss bei 3.3 auch immer erst das Array in der Procedure freigeben :


Ne, muss man nicht...
-.-"
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

*kopfkratz*

STIMMT, geht ja doch ohne :oops:

sry AND51

..

komisch vor 2 Monaten gings noch nicht :?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> sry AND51
Nicht schlimm. Ich habe eh nur Erfahrung mit 3.94. Dass das, was ich sagte, auch für vorige Versionen gilt, war eh nur erraten :wink:

Ansonsten überasse ich weiterhin gern dir das 3.30-Feld... :allright:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Hier mal die üblichen PB4 Varianten (ohne Global)

Code: Alles auswählen

Dim bla.l(1) ; muß vor Nutzung per Shared deklariert sein

Procedure a()
  Shared bla.l()
  bla(0) = 1
EndProcedure

Procedure b(array.l(1)); Array als Parameter (1 gibt die Dimensionen an)
  array(1) = 2
EndProcedure

a()
b(bla())

Debug bla(0)
Debug bla(1)
Ich hoffe das hat gehilft :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten