 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 23.03.2010, 12:31 Titel: operator cast() funktioniert nicht wie er soll :-(( |
|
|
folgender Code compiliert leider nicht
Code: |
type flexbuffer
buffer as any ptr
declare sub mirror
declare sub flip
declare sub invert
declare constructor(w as integer, h as integer)
declare operator cast() as any ptr
end type
constructor flexbuffer(w as integer, h as integer)
buffer = imagecreate(w,h,RGB(0,0,0))
end constructor
operator flexbuffer.cast() as any ptr
return buffer
end operator
screen 16,32
cls
var test = flexbuffer(300,300)
line test, (0,0)-(300,300),RGB(0,255,0),BF
put (0,0), test
sleep
|
anscheinend funktioniert der cast-operator nicht in verbindung mit grafik-anweisungen die einen grafik-buffer-pointer erwarten..
weiss einer wo der fehler liegt?
PS: ich weiss, statt:
Code: |
line test, (0,0)-(300,300),RGB(0,255,0),BF
put (0,0), test
|
könnte man schreiben:
Code: |
line test->buffer, (0,0)-(300,300),RGB(0,255,0),BF
put (0,0), test->buffer
|
das wäre aber nicht das worauf ich hinaus will. ich möchte einen "erweiterten" grafikbuffer, der sich ansonsten genau so verhält wie ein normaler buffer.. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 23.03.2010, 15:06 Titel: |
|
|
Fehlermeldung? |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 23.03.2010, 15:40 Titel: |
|
|
testx2.bas(22) error 16: Expected '-', found ',' in 'line test, (0,0)-(300,300),RGB(0,255,0),BF'
testx2.bas(23) error 14: Expected identifier in 'put (0,0), test' |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 23.03.2010, 15:49 Titel: |
|
|
Mit dem selben Prinzip wollte ich auch schon einmal einen Type realisieren, habs aber auch nicht so hinbekommen wie ich mir das vorgestellt hätte.
Ich denke das Problem liegt daran, dass FreeBasic nicht in jedem Fall implizit CASTet, sondern nur in manchen Fällen. Wann dies passiert und wann nicht kann ich dir nicht genau sagen.
Der überladene Operator sorgt ja schließlich nur dafür, dass du deinen UDT in einen anderen Datentypen konvertieren kannst - nicht aber, dass dieser implizit konvertiert wird.
Dazu ist eine explizite Angabe des CAST Befehls notwendig.
In deinem Programm wie folgt:
Code: | line cast(any ptr, test), (0,0)-(300,300),RGB(0,255,0),BF
put (0,0), cast(any ptr, test) |
_________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 23.03.2010, 18:40 Titel: |
|
|
@St_W: Also die variable immer in eine cast-funktion zu packen ist auch nich die elegante lösung. Dann würd ich eher noch den zeiger aufs Puffer-Element in kauf nehmen...
Ich glaub, der datentyp des CAST-Operanden muss ganz genau mit dem datentyp übereinstimmen der von der Anweisung erwartet wird.
z.B.
sowas funktioniert nicht:
Code: |
type testtype
einezahl1 as integer = int(rnd * 100)
einezahl2 as integer = int(rnd * 100)
declare operator cast() as integer
end type
operator testtype.cast() as integer
return (einezahl1 + einezahl2)
end operator
dim test as testtype
print "" & test
sleep
|
während sowas einwandfrei funktioniert:
Code: |
type testtype
einezahl1 as integer = int(rnd * 100)
einezahl2 as integer = int(rnd * 100)
declare operator cast() as integer
end type
operator testtype.cast() as integer
return (einezahl1 + einezahl2)
end operator
dim test as testtype
dim zahl as integer = test
print "" & zahl
sleep
|
daher mache ich mal die vorsichtige behauptung, dass put, get, line, circle (etc.) einen zeiger auf einen puffer erwarten der nicht "any ptr" ist sondern irgendwas anderes...
Kann mal einer in den Quelltexten schauen welchen datentyp die grafikanweisungen erwarten? .. ich finde das nicht  |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|