Seite 1 von 1

Dynamische Objekte in Strukturen

Verfasst: 12.03.2014 18:32
von _sivizius
unter »Struktur« lese ich:
»Dynamische Objekte wie Arrays, Listen und Maps werden innerhalb von Strukturen unterstützt und werden automatisch initialisiert, wenn das Objekt mit Hilfe der Struktur erstellt wird. Um solche Felder zu deklarieren, verwenden Sie die folgende Schlüsselwörter: Array, List und Map.«

Code: Alles auswählen

Structure Person
  Name$
  Age.l
  List Friends$()
EndStructure

John.Person
John\Name$ = "John"
John\Age   = 23
  
; Jetzt fügen wir einige Freunde zu John hinzu
;
AddElement(John\Friends$())
John\Friends$() = "Jim"
Bei den »Compiler Funktionen«, unter »InitializeStructure« steht jedoch:
»InitializeStructure initialisiert den angegebenen strukturierten Speicherbereich. Es initialisiert die Struktur-Objekte ("members") vom Typ Array, Liste oder Map, andere Objekte sind nicht betroffen (.s, .l, .i etc.).«

Code: Alles auswählen

Structure People
  Name$
  Age.l
  List Friends.s()
EndStructure

*Student.People = AllocateMemory(SizeOf(People))
InitializeStructure(*Student, People)

; Jetzt ist die Liste fertig zur Benutzung
;
AddElement(*Student\Friends())
*Student\Friends() = "John"
Werden Arrays initialisiert, das heißt ein Speicherbereich allocated, wenn ich ein Objekt mit test.struc erstelle?

Code: Alles auswählen

Structure test
  Array self.i(123)
EndStructure
Debug SizeOf(test)
*myself.test = AllocateMemory(SizeOf(test))
Debug *myself
Debug PeekI(*myself)
InitializeStructure(*myself, test)
Debug PeekI(*myself)
zeigt, das das Array nicht initialisiert wird. Ist das _immer_ so? ist der Text in der Hilfe unter »Struktur« veraltet?
mfg
_sivizius

Re: Dynamische Objekte in Strukturen

Verfasst: 12.03.2014 19:14
von ts-soft

Code: Alles auswählen

Structure Person
  Name$
  Age.l
  List Friends$()
EndStructure

Define John.Person ; wird von PB initialisiert.

Define *Johnson.Person ; muß selber allokiert und initialisiert werden!
Bei der ersten Variante wird alles von PB erledigt.
Die zweite Variante wird nur in speziellen Fällen von erfahrenen Anwendern
benötigt.

Gruß
Thomas

Re: Dynamische Objekte in Strukturen

Verfasst: 12.03.2014 19:34
von NicTheQuick
Siehe dazu auch mein neues Video. Da wird das auch angesprochen: [PB] Strukturen und Interfaces

Re: Dynamische Objekte in Strukturen

Verfasst: 12.03.2014 19:53
von _sivizius
also immer nur dann, wenn ich mit pointern arbeite, muss ich selbst initialisieren...könnte man unter »structure« in der hilfe ergänzen...