Types und Funktionen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Darren

Betreff: Types und Funktionen

BeitragFr, Jul 04, 2008 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey com!

ich bin grade dabei mein altes dreiecks-tool nochmal komplett neu zu schreiben und diesmal mit ziemlich modularem aufbau.

um das bequem zu erreichen benutz ich types bei denen ich lange rumgetüftelt habe, bis ich da ne sinnvolle struktur und "hierachie" drin hatte.

jetzt würde ich an eine funktion gerne mehrere zeiger übergeben und auch wieder nen zeiger rausbekommen. das mache ich hier beispielsweise so:

Code: [AUSKLAPPEN]

Type point   
   Field x,y
   Field used
   Field selected
End Type

Type straight
   Field point1.point
   Field point2.point   
   Field a1,a2;aufpunkt
   Field v1#,v2#;richtung
   Field length#   
   Field selected
   Field r,g,b
End Type

;------- ....

Local str_punkt.point[1]                  
         For punkt.point = Each point
            If punkt\selected = 1 Then
               str_punkt[i] = punkt.point               
               i = i + 1
               punkt\used = 1
               If i = 2 Then Exit
            End If
         Next         
         gerade.straight = New straight
         gerade.straight = connect_points.straight(gerade.straight,str_punkt.point[0],str_punkt.point[1],0,0,0)


das programm bricht mit der fehlermeldung: "variable type mismatch" ab. und der cursor blinkt am anfang der letzten codezeile.

hier die zugehörige funktion:

Code: [AUSKLAPPEN]
Function connect_points.straight(linie.straight,p1.point,p2.point,r=255,g=0,b=255)
   Local l#,dx#,dy#
      
   ;punkte der linie zuweisen
   ;linie
   ;aufpunkt der linie
   linie\a1 = p1\x
   linie\a2 = p1\y
   ;steigung
   dx = p1\x-p2\x
   dy = p1\y-p2\y
   ;länge
   l = Sqr(dx^2+dy^2)
   linie\v1 = dx/l
   linie\v2 = dy/l   
   linie\length = l   
   ;farbe
   linie\r = r
   linie\g = g
   linie\b = b
   
   Return linie.straight   
End Function



Ich kann mir die fehlermeldung absolut nicht erklären. vielleicht jemand von euch?

lg Darren
MFG Darren

Xeres

Moderator

BeitragFr, Jul 04, 2008 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
In der Funktion ist die Variable "linie.straight" zwar übergeben worden, aber bin mir grad nicht sicher, ob das ausreichend deklariert ist. Du könntest mit last den letzten - da gerade erstellten - Eintrag aus der Typeliste explizit angeben, oder new innerhalb der Funktion aufrufen.
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)
 

Darren

BeitragFr, Jul 04, 2008 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
In der Funktion ist die Variable "linie.straight" zwar übergeben worden, aber bin mir grad nicht sicher, ob das ausreichend deklariert ist. Du könntest mit last den letzten - da gerade erstellten - Eintrag aus der Typeliste explizit angeben, oder new innerhalb der Funktion aufrufen.


Eigentlich wollte ich das NEW nicht in der Funktion haben, habe es aber mal reingeschrieben und einen kleinen Fehler im Code ausgebessert, wenn ich jetzt folgenden Code ausführen will:

Code: [AUSKLAPPEN]
Local str_punkt.point[1]                  
         For punkt.point = Each point
            If punkt\selected = 1 Then
               str_punkt.point[i] = punkt.point               
               i = i + 1
               punkt\used = 1
               If i = 2 Then Exit
            End If
         Next         
         gerade.straight = New straight         
         gerade.straight = connect_points.straight(str_punkt.point[0],str_punkt.point[1],0,0,0)


dann spuckt mir blitz die gleiche meldung wie vorher aus. doch an folgender stelle:
Code: [AUSKLAPPEN]

str_punkt.point[i] = punkt.point


scheinbar verhalten sich blitzarrays als zeiger ein wenig anders, als man es erwarten könnte. zumal in types blitzarrays als zeiger wunderbar funktionieren.
MFG Darren

Noobody

BeitragFr, Jul 04, 2008 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Solche Probleme hatte ich auch einmal - die Lösung kam dann relativ unerwartet.
Bei Blitzarrays darf man nur bei der Deklaration den Variablentyp angeben ($, %, # oder ein Typename).
Hängt man irgendwo sonst im Code den Variablentyp dennoch dran, spuckt der Compiler ein 'Variable Type mismatch' aus, selbst wenn man dasselbe Typzeichen verwendet hat wie bei der Deklaration.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

Darren

BeitragFr, Jul 04, 2008 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Noobody hat Folgendes geschrieben:
Solche Probleme hatte ich auch einmal - die Lösung kam dann relativ unerwartet.
Bei Blitzarrays darf man nur bei der Deklaration den Variablentyp angeben ($, %, # oder ein Typename).
Hängt man irgendwo sonst im Code den Variablentyp dennoch dran, spuckt der Compiler ein 'Variable Type mismatch' aus, selbst wenn man dasselbe Typzeichen verwendet hat wie bei der Deklaration.


Das stimmt! Das macht den Code zwar ein wenig unübersichtlicher, aber du hast recht. vielen dank. Diese erkenntnis sollte vielleicht in der hilfe erwähnt werden.
MFG Darren

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group