Dynamische Objekte in Strukturen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Dynamische Objekte in Strukturen

Beitrag 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
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

Re: Dynamische Objekte in Strukturen

Beitrag 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
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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Dynamische Objekte in Strukturen

Beitrag von NicTheQuick »

Siehe dazu auch mein neues Video. Da wird das auch angesprochen: [PB] Strukturen und Interfaces
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Dynamische Objekte in Strukturen

Beitrag 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...
Antworten