Kann Object nicht zu Int konvertieren?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Kann Object nicht zu Int konvertieren?

BeitragMo, Nov 01, 2010 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute.
Ich hab ein kleines Problem was mich wundert.
Undzwar habe ich eine Funktion die folgendermaßen aussieht:
BlitzMax: [AUSKLAPPEN]
Method X:Float(p:Object)
If p = Null Then
Return Self._fXComponent
Else
If Int(p) <> Self._fXComponent Then
Self._fXComponent = Int(p)
EndIf
EndIf
EndMethod


Wie ihr seht möchte ich in der zweiten If-Abfrage ein Objekt vom Typ Object in Int konvertieren. Aber mein Compiler sagt mir "unable to convert from Object to Int"
Warum ist das so? Es müsste doch gehen oder hab ich was falsch gemacht?

Ich seh meinen Fehler grade nicht.
Kann mir da vielleicht jemand helfen?

Lg, M0rgenstern

mpmxyz

BeitragMo, Nov 01, 2010 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
In kurz:
Sind Zahlen Objekte?
Nein!
Lassen sich Objekte in Zahlen konvertieren?
Warum sollten sie? (Hast du einen Grund, warum man das machen können sollte?)
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

M0rgenstern

BeitragMo, Nov 01, 2010 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber man kann doch eigentlich von Object aus alles casten, oder?
Ich mein, sonst wären Funktionspointer ja auch sone Sache, oder seh ich das falsch?

Lg, M0rgenstern
 

Macintosh

BeitragMo, Nov 01, 2010 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
integer, floats, shorts, bytes, doubles und longs sind aber keine objekte ;)
du kann aus objekten nur objecte kasten, da object sowas wie die superklasse (hoffe das simmt jetzt) aller objekte ist

mpmxyz

BeitragMo, Nov 01, 2010 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Zahlen und Pointer sind primitive Datentypen und daher keine Objekte.
Sie werden nicht wie ein Objekt erstellt, sondern sind einfach nur Werte, die aus mehreren Bytes bestehen können.
Objekte hätten für solche Werte einen zu großen Overhead.
So müsste man für jede Byte-Variable eine Referenz mit 4 Byte Speicherverbrauch zu einem Byte-Objekt, welches mindestens eine zusätzliche Typangabe mit wahrscheinlich auch 4 Bytes Speicherverbrauch benötigt, bereitstellen.
So kommt man alleine bei einen Byte-Wert auf 9 Bytes Minimalverbrauch zur Verwaltung.
Zusätzlich muss der Garbage Collector auch die ganzen Zahlenobjekte kontrollieren. Hier kommt also noch etwas an Daten und Rechenzeit hinzu.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

M0rgenstern

BeitragMo, Nov 01, 2010 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
OKay. Stimmt, hätte mir klar sein müssen.
Dann aber mal ne Frage:
Wie siehts mit Funktionspointern aus als Attribut einer Klasse?
Also, da legt man den Rückgabewert doch am besten auch erstmal als Object fest.
Wie siehts dann da aus?

Lg, M0rgenstern
 

Macintosh

BeitragMo, Nov 01, 2010 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
nö, wenns die funktion deinen funktionpointers nen int zurückginbt, muss das auch im funktionspointer sein. so ist das ^^

M0rgenstern

BeitragMo, Nov 01, 2010 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
UNd wie machen die Leute das die ne GUI schreiben?
Die wissen ja vorher nicht wozu die Klick Methode der Buttons sien soll bzw was die zurückgeben soll.
Oder habe ich hier nen total falschen Ansatz was das anbelangt?

Lg, M0rgenstern

Farbfinsternis

BeitragMo, Nov 01, 2010 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst die Funktion in einen Byte Ptr packen, aber nur Funktionen ... keine Objekte odr Methoden.
Farbfinsternis.tv

M0rgenstern

BeitragMo, Nov 01, 2010 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso.
Und was genau ist byte ptr?

Lg, M0rgenstern

Farbfinsternis

BeitragMo, Nov 01, 2010 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Byte Ptr war Quatsch ... das hier funktioniert:
BlitzMax: [AUSKLAPPEN]

Type TTest
Field _callback()

Method SetCallBack(callback())
Self._callback = callback
End Method

Method call()
Self._callback()
End Method
End Type

Function TestCallback()
Print "Hello World"
End Function

Local test:TTest = New TTest
test.SetCallBack(TestCallback)
test.call()

End
Farbfinsternis.tv

M0rgenstern

BeitragMo, Nov 01, 2010 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm.
Könnte man diese Funktion:
BlitzMax: [AUSKLAPPEN]
Function TestCallback()
Print "Hello World"
End Function

Auch so umschreiben:
BlitzMax: [AUSKLAPPEN]
Function TestCallback()
Return 27
End Function


Und diese dann eben der Instanz aus der Klasse entsprechend zuweisen.

Lg, M0rgenstern
 

Macintosh

BeitragMo, Nov 01, 2010 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, wenn du eine ui machst, sollte die button callback normalerweise nichts zurück geben, und wenn dann nimmt man meist object.

Farbfinsternis

BeitragMo, Nov 01, 2010 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Funktion muss im Type (das Field) dann mit Rückgabewert deklariert werden und die Callback Funktion dann exakt so implementiert werden. Da wäre es einfacher die Callbacks im Type virtuell zu deklarieren und den User zu zwingen sie per Extend zu definieren.
Farbfinsternis.tv

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group