Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

operator cast() funktioniert nicht wie er soll :-((

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 23.03.2010, 12:31    Titel: operator cast() funktioniert nicht wie er soll :-(( Antworten mit Zitat

folgender Code compiliert leider nicht traurig

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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 23.03.2010, 15:06    Titel: Antworten mit Zitat

Fehlermeldung?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 23.03.2010, 15:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 23.03.2010, 15:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 23.03.2010, 18:40    Titel: Antworten mit Zitat

@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 böse
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz