Type-Eigenschaft durch Liste erfragen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Nova

Betreff: Type-Eigenschaft durch Liste erfragen

BeitragFr, Apr 29, 2011 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich speichere ein paar Objekte in eine Liste, aber wenn ich dann eine Eigenschaft eines Objekts aus dieser Liste abfragen will, kriege ich nur eine Fehlermeldung für Zeile 3: "Compile Error: Identifier 'eigenschaft' not found"
Aber auch das Zwischenspeichern in einer Variable, wie in Zeile 5 & 6 gemacht, führt nicht zum gewünschten Ziel. Fehlermeldung: "Compile Error: Unable to convert from 'Object()' to 'Test'"

BlitzMax: [AUSKLAPPEN]
Local alle:TList = New TList
alle.AddLast(New Test)
Print alle.Last.eigenschaft

Local bla:Test = alle.Last
Print bla.eigenschaft

Type Test
Field eigenschaft:Int = 42
End Type


Arbeite noch nicht so lange mit Objektorientiertheit in BlitzMax, allgemein habe ich bisher eher mit BlitzBasic gearbeitet.
OOP ist mir bisher auch nur durch C++ und Java bekannt, von daher muss ich mich da erst noch ein wenig einfinden.

Wer mir helfen kann kriegt möglicherweise von mir einen imaginären Keks, ich muss mir aber noch überlegen, ob ich mir das leisten kann! Very Happy


Gruß, Nova
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

Xeres

Moderator

BeitragFr, Apr 29, 2011 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Last ist eine Methode die ein Objekt zurück gibt, darum a) Klammern nicht unterschlagen und b) Objekt explizit casten:

BlitzMax: [AUSKLAPPEN]
SuperStrict

Local alle:TList = New TList
alle.AddLast(New TTest)
Print TTest(alle.Last()).eigenschaft

Local bla:TTest = TTest(alle.Last())
Print bla.eigenschaft

Type TTest
Field eigenschaft:Int = 42
End Type
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Nova

BeitragFr, Apr 29, 2011 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich war mir schon die ganze Zeit mit den Klammern unsicher. Wann muss man die denn setzen und wann nicht? Muss man bei eigenen Funktionen immer Klammern setzen?

Vielen Dank für die Hilfe! (Einen kann ich mir leisten, bitte! user posted image) Smile

mpmxyz

BeitragFr, Apr 29, 2011 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Funktionsaufrufen sollte man der Übersicht halber immer Klammern setzen. ("Test(), obj.Meth()")
Solange man keinen Rückgabewert von der Funktion/Methode nutzen möchte, sind die Klammern keine Pflicht.
Das ist alles richtig:
BlitzMax: [AUSKLAPPEN]
Strict
Local stream:TStream
Print 123 'Es ist egal, ob hier eine eigene oder eine BlitzMax-eigene Funktion steht. Es ist beides das gleiche.
Print(123)
Print stream.ReadInt()
Print(stream.ReadInt())
Print Float(stream.ReadInt()) 'Umcasten kann man wie einen Funktionsaufruf sehen. Daher sollte man auch Klammern setzen.
Print Float stream.ReadInt() 'Es geht aber seltsamerweise auch ohne. Hier ist aber die Reihenfolge nicht offensichtlich. -> Wird stream, ReadInt oder der Rückgabewert umgewandelt?

So geht es nicht:
BlitzMax: [AUSKLAPPEN]
Strict
Print(stream.ReadInt) 'ReadInt wird hier nicht aufgerufen, sondern direkt übergeben. Das liegt daran, dass man auf diese Art und Weise Funktionspointer übergibt.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group