Referenz - TYPE (Forward Referencing)
Syntax A: TYPE ForwardName AS TypeName
Syntax B: TYPE AS TypeName ForwardName
Typ: Anweisung
Kategorie: Klassen
In manchen Situationen ist es notwendig, einen Pointer auf ein UDT zu legen, der erst später im Programm definiert wird. Um dies zu ermöglichen, kann ein Forward-Type erstellt werden.
Beispiel:
TYPE FwdUDT2 AS UDT2
TYPE UDT1
a AS INTEGER
b AS FwdUDT2 PTR
END TYPE
TYPE UDT2
c AS INTEGER
d AS INTEGER
END TYPE
Wer stattdessen den folgenden Code versucht, erhält die Fehlermeldung "Typ nicht definiert":
' Fehlerhafte Einbindung eines noch nicht existenten UDTs
TYPE UDT1
a AS INTEGER
b AS UDT2 PTR
END TYPE
TYPE UDT2
c AS INTEGER
d AS INTEGER
END TYPE
Beim Forward Referencing ist darauf zu achten, dass nur UDTs zur Deklaration verwendet werden können, die vollständig sind. Ein UDT ist dann vollständig, wenn die Größe aller Elemente im UDT bekannt sind. Anders gesagt muss vom gesamten UDT die Größe in Byte bekannt sein. Folgender Code wird den Compilerfehler 'Incomplete type' ergeben:
' Fehlerhafte Einbindung eines unvollständigen UDTs
Type einTyp As forwardTyp
Dim As einTyp beispiel
Type forwardTyp
dummy As Integer
End Type
Um das Problem zu lösen, muss, bevor eine Instanz des UDTs erstellt wird, die Größe bekannt sein. Für das kleine Beispiel würde es folgendermaßen aussehen:
Type einTyp As forwardTyp
Type forwardTyp
dummy As Integer
End Type
Dim As einTyp beispiel
Benötigt man die Instanz aber aus irgendwelchen Gründen vor dem Forward-Type, kann das durch einen Pointer gelöst werden. Die Größe eines Pointers ist immer bekannt, folglich auch kein Problem:
Type einTyp As forwardTyp
Dim As einTyp Ptr beispiel
Type forwardTyp
dummy As Integer
End Type
Beispiel einer Fenster-Klasse mit Button:
Type tempButton As button ' Forward-Type für 'button'
Type fenster ' Fenster-Klasse
beendenknopf As tempButton Ptr ' Beenden-Button der noch unbekannten Klasse
x As Integer
y As Integer
End Type
Type button ' Button-Klasse
parent As fenster Ptr ' Eltern-Type der Button-Klasse
x As Integer
y As Integer
End Type
' Objekte erstellen
Dim As fenster Ptr meinProgramm
meinProgramm = New fenster
meinProgramm->beendenknopf = New button
' Daten zuweisen
meinProgramm->x = 500
meinProgramm->y = 200
meinProgramm->beendenknopf->parent = meinProgramm
meinProgramm->beendenknopf->x = 150
meinProgramm->beendenknopf->y = 25
' Fenster erstellen
ScreenRes meinProgramm->x, meinProgramm->y
Line (0, 0)-(meinProgramm->beendenknopf->x, meinProgramm->beendenknopf->y), 15, BF
Draw String (5, 5), meinProgramm & " = " & meinProgramm->beendenknopf->parent, 0
' Objekte zerstören
Delete meinProgramm->beendenknopf
Delete meinProgramm
Sleep
Unterschiede zu QB: neu in FreeBASIC
Siehe auch:
TYPE (UDT), TYPE (Funktion), Datentypen und Deklarationen, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|