Type-Array als Field?
Übersicht

![]() |
gekkonierBetreff: Type-Array als Field? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich habe folgenden Code: Code: [AUSKLAPPEN] SuperStrict
Type Feld Field color:Int Field status:Int End Type Type Matrix Field data:Feld[10, 10] Method New() ' Wie initialisiere ich hier das Array korrekt? End Method End Type Local m:Matrix = New Matrix m.data[0, 0].color = 10 Wenn ich jetzt das Ding kompiliere kommt als Fehler zur letzten Zeile Code: [AUSKLAPPEN] Unhandled Exception:Attempt to access field or method of Null object , was mich vermuten lässt, dass ich das Array nach der Deklaration initialisieren muss. Quasi so wie hier:
Code: [AUSKLAPPEN] SuperStrict
Type Feld Field color:Int Field status:Int End Type Type Matrix Field data:Feld Method New() data:Feld = New Feld End Method End Type Local m:Matrix = New Matrix m.data.color = 10 Wie macht man das mit ein oder mehrdimensionalen Arrays? Gibt es dazu etwas was ich in der Hilfe übersehen hätte? Ich hab alles mögliche schon ausprobiert, aber meistens ganz üble Fehler bekommen (Falsche Array Dimensionen, Null-Referenzen und weiss der Geier ![]() Danke im Voraus, Gekko |
||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eigentlich wollte ich das hier als Lösung posten:
Code: [AUSKLAPPEN] Type Matrix
Field data:Feld[,] Method New() data = New Feld[10,10] End Method End Type Nur kommt der Fehler bei mir nicht. Sollte er aber, oder hab ich was übersehen? ![]() |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
gekkonier |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn man das alleine so stehen lasst funktioniert das ja auch, wenn ich dann allerdings das Ding verwenden will, ala:
Code: [AUSKLAPPEN] Local m:Matrix = New Matrix
m.data[0, 0].color = 1 Bekomme ich: Code: [AUSKLAPPEN] Unhandled Exception:Attempt to access field or method of Null object
So vertraut mit der Syntax von Bmax bin ich noch nicht ![]() |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ChristianK:
So erstellt man nur ein Array, aber nicht die Objekte selber. ( Im Debug-Modus kommt die Fehlermeldung wegen dem Null-Objekt ) @gekonnier: Es ist ganz simpel. Dynamische Initialisierungs-Lösung wäre: Code: [AUSKLAPPEN] Type Matrix
Field data:Feld[10, 10] Method New() Local dims:Int[]=data.dimensions() For Local x:Int=0 Until dims.length For Local y:Int=0 Until dims[x] data[x,y]=New Feld Next Next End Method End Type und die statische: Code: [AUSKLAPPEN] Type Matrix
Field data:Feld[10, 10] Method New() For Local x:Int=0 Until 10 For Local y:Int=0 Until 10 data[x,y]=New Feld Next Next End Method End Type Dürfte eigentlich selbsterklärend sein? Gruß, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
![]() |
gekkonier |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aha, das bedeutet, dass ich jedes Objekt quasi "manuell" anlegen muss.
Danke für die Information! |
||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
*oops, falsch gelesen... sorry*
cheers |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
d-bug hat Folgendes geschrieben: Ähm entschuldigt die Einmischung, aber bei einem statischen Array genügt folgendes völlig.
Code: [AUSKLAPPEN] Type Matrix
Field data:Int[10, 10] End Type cheers Bei Datentypen ja, aber nicht bei Type's bzw Objekten. ( Wenn der Mensch, wie es in diesem Falle ist, die Objekte dort auch "sofort" haben möchte ) Gruß, FOODy |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@FOODy
ja, das ist mir schon klar. Mich wundert aber, dass der Fehler nur im Debug-Modus erkannt wird. Im Release-Build funktioniert das hier: Code: [AUSKLAPPEN] SuperStrict
Framework brl.standardio Type Test Field hi:Int End Type Local x:Test x.hi = 123 Print x.hi |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ChristianK:
Im Release ist das mehr oder weniger eine "Glückssache". Bei mir ist der Fehler auch nur im Debugmodus gekommen, was warscheinlich auch daran liegt das geprüft wird ob das Objekt auf einen gültigen speicherbereich "zeigt" etc. Gruß, FOODy EDIT: d-bug hat Folgendes geschrieben: FOODy hat Folgendes geschrieben:
d-bug hat Folgendes geschrieben:
Blablubblapper
Bei Datentypen ja, aber nicht bei Type's bzw Objekten. ( Wenn der Mensch, wie es in diesem Falle ist, die Objekte dort auch "sofort" haben möchte ) Gruß, FOODy Na deswegen hatte ich ja auch schon VOR deinem Post meinen gelöscht. Ich hatte mich schlichtweg verlesen! Ich wollte dich damit nicht angreifen. Es darf doch mal passieren, dass ich dein Edit erst nachdem ich auf Absenden gedrückt habe bemerke. ;) |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
- Zuletzt bearbeitet von FOODy am Mi, März 26, 2008 21:28, insgesamt einmal bearbeitet
![]() |
gekkonier |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ists im Prinzip besser es so, wie von FOODy vorgeschlagen anzuwenden, um etwaigen Problemen aus dem Wege zu gehen.
Praktikabler wärs zwar, wenn man das wie bei normalen Datentypen verwenden könnte, aber so kann ich auch damit leben ![]() |
||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
FOODy hat Folgendes geschrieben: d-bug hat Folgendes geschrieben:
Blablubblapper
Bei Datentypen ja, aber nicht bei Type's bzw Objekten. ( Wenn der Mensch, wie es in diesem Falle ist, die Objekte dort auch "sofort" haben möchte ) Gruß, FOODy Na deswegen hatte ich ja auch schon VOR deinem Post meinen gelöscht. Ich hatte mich schlichtweg verlesen! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group