  | 
					
						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, 11: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, 14:06    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Fehlermeldung? | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		OneCypher
 
 
  Anmeldungsdatum: 23.09.2007 Beiträge: 802
 
  | 
		
			
				 Verfasst am: 23.03.2010, 14: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: 958 Wohnort: Austria
  | 
		
			
				 Verfasst am: 23.03.2010, 14: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, 17: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.
  | 
   
 
     |