Map mit structure

Für allgemeine Fragen zur Programmierung mit PureBasic.
kmais
Beiträge: 45
Registriert: 09.02.2017 13:54

Map mit structure

Beitrag von kmais »

Hallo, Leute ...

Wenn ich die pb Hilfe richtig verstehe, ist es doch möglich eine Map() mit einer structure zu versehen.

Also so etwas etwa:
Structure treeParams
Key.s
KeyId.i
Text.s
ImageId.i
Vg.s
VgId.i
EndStructure

NewMap treeIn.treeParams()
NewMap treeOut.treeParams()

Ich habe folgenden Code:

Code: Alles auswählen

Structure treeParams
  Key.s
  KeyId.i
  Text.s
  ImageId.i
  Vg.s
  VgId.i
EndStructure
NewMap treeIn.treeParams()
NewMap treeOut.treeParams()

key.s="start"

AddMapElement(treeOut(),key)
treeOut(key)=treeIn(key)
Procedure parseTree(key)
  ForEach treeIn()
    If treeIn()\Vg = key
      key=treeIn()\Key
      AddMapElement(treeOut(),key)
      treeOut(key)=treeIn(key)
      DeleteMapElement(treeIn(),key)
      parseTree(key)
    EndIf
  Next
EndProcedure
Es geht jetzt nicht um den Code in seiner Funktion. Das kann ich sowieso erst testen, wenn dieser Fehler behoben wird.
Der Compiler sagt mir beim Eintritt in foreach, dass treeIn KEINE Map ist.
Wieso ????? Wo liegt mein Denkfehler oder mein fehlendes Wissen? Oder habe ich grundsätzlich etwas nicht verstanden?

Vielen Dank für die Hilfe

.... Peter ....
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Map mit structure

Beitrag von #NULL »

Die Maps sind nicht sichtbar innerhalb der Procedure. Du must sie entweder als 'Global NewMap' definieren, oder als 'Shared tree..()' innerhalb der Procedure.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: Map mit structure

Beitrag von Thorsten1867 »

Du hast die Map außerhalb der Procedur definiert, womit diese innerhalb dieser unbekannt ist.
Es gibt 2 Möglichkeiten:

- Map global definieren: Global NewMap treeIn.treeParams()
- Map an die Prozedur übergeben (siehe Code)

Code: Alles auswählen

Structure treeParams
  Key.s
  KeyId.i
  Text.s
  ImageId.i
  Vg.s
  VgId.i
EndStructure
NewMap treeIn.treeParams()
NewMap treeOut.treeParams()

key.s="start"

AddMapElement(treeOut(),key)
treeOut(key)=treeIn(key)

Procedure parseTree(key.s, Map In.treeParams(), Map Out.treeParams())
  ForEach In()
    If In()\Vg = key
      key=In()\Key
      AddMapElement(In(), key)
      Out(key)\Key = In(key)\Key
      DeleteMapElement(In(), key)
      parseTree(key, In(), Out())
    EndIf
  Next
EndProcedure
PS: Ich habe die restlichen Fehler gleich auch noch behoben. :wink:
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
kmais
Beiträge: 45
Registriert: 09.02.2017 13:54

Re: Map mit structure

Beitrag von kmais »

... Mist ... :oops: :( ,

........ vielen Dank ....
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Map mit structure

Beitrag von Shardik »

Thorsten1867 hat geschrieben:Es gibt 2 Möglichkeiten:

- Map global definieren: Global NewMap treeIn.treeParams()
- Map an die Prozedur übergeben (siehe Code)
Es gibt noch eine dritte Möglichkeit:
- Map in Hauptprogramm mit Define deklarieren und in der Prozedur mit Shared (die Map ist dann außer im Hauptprogramm nicht automatisch in allen Prozeduren bekannt wie bei Deklaration mit Global)
Antworten