GLBasic forum

Other languages => GLBasic - de => Topic started by: monono on 2010-Jul-17

Title: brauche Debughilfe // gelöst -> *lösch mich*
Post by: monono on 2010-Jul-17
Hallo zusammen,
Sicherlich kennt der eine oder andere das, das GLB nicht kompilieren will und zeigt mit einer Fehlermeldung auf eine Stelle, die erstmal mal gar nichts mit dem Fehler zu tun haben scheint. Bei mir zeigt er gerade mit der Fehlermeldung ""q_core.gbas"(0) error : wrong argument type :" auf die 2. Zeile meiner ersten Quelldatei. Darin steht:
Code (glbasic) Select

GLOBAL QMO_Motions, QMO_Objects

Selbst wenn ich die Zeile auskommentiere macht er das gleiche. Ich steh auf dem Schlauch, deswegen meine Frage: Was will der Kompiler? Was könnte er bemängeln?
Leider hatte ich verfrüht abgespeichert und beendet, so das undo nicht mehr funktionieren kann.
Danke im Vorraus!
Title: Re: brauche Debughilfe
Post by: monono on 2010-Jul-17
Hätte ich mal 5 Minuten überlegt vor dem Posten. Hatte gestern noch den gescheiterten Versuch unternommen ein Type als Referenz aus einer Funktion zurückzugeben. Sozusagen ein Handle/Pointer auf ein Mitglied einer Typeliste der unabhängig vom index zu gebrauchen ist. Habe alles Rückgängig gemacht. Jetzt funktioniert es wieder. :blink:
Title: Re: brauche Debughilfe // gelöst -> *lösch mich*
Post by: Schranz0r on 2010-Jul-17
aber nen "pointer" zu übergeben geht!

Code (glbasic) Select
FUNCTION Bla AS MyType: x,y,z
LOCAL pointer AS MyType

    pointer.x = x
    // ... usw
    RETURN pointer
ENDFUNCTION
Title: Re: brauche Debughilfe // gelöst -> *lösch mich*
Post by: monono on 2010-Jul-17
Super! Danke für deinen Kommentar. Aber geht auch:
Code (glbasic) Select
GLOBAL MyTypes[] as MyType

FUNCTION Bla AS MyType: x,y,z
LOCAL pointer AS MyType
   
    pointer = MyTypes[1]
    // ... usw
    RETURN pointer
ENDFUNCTION


so das pointer nicht nur eine Kopie ist, sondern eine Änderung in dem Rückgabetype auch zu Änderungen in MyTypes[1] führen (soz. BYREF umgekehrt). Unabhängig davon ob das Object jetzt vielleicht schon MyTypes[0] ist. So wie ich mich erinnere es mit HANDLE() und OBJECT() in dem anderen Basic-Dialekt gemacht zu haben.
Title: Re: brauche Debughilfe // gelöst -> *lösch mich*
Post by: Schranz0r on 2010-Jul-18
Code (glbasic) Select
GLOBAL MyTypes[] as MyType

FUNCTION Bla: x,y,z
    LOCAL pointer AS MyType       
    pointer.x = x
    // ... usw   
    DIMPUSH MyTypes [],pointer
    RETURN LEN(MyTypes[])-1 // return "handle"
ENDFUNCTION


Im Code kannst du dann machen :

Code (glbasic) Select
LOCAL handle = Bla(10,20,30)

PRINT MyTypes[handle].x, 10, 10
//usw :)
Title: Re: brauche Debughilfe // gelöst -> *lösch mich*
Post by: monono on 2010-Jul-18
Ja genau so mache ich das ja. Aber handle ist leider nur ein index, ein Stelle im Array. Wenn ich irgendws lösche ist der index für die Katz. Ich mache das jetzt so, das ich die Sachen nicht lösche sondern nur My_Type.del  auf TRUE und bei der Type-Erstellung diese überschreibe. Soweit so gut. Jetzt weiß ich aber immer noch nicht ob ich z.B. mit dem index 40 ein Object anspreche das ich will, oder ob dieses schon längst gelöscht ist und dort stattdessen ein anderes ist. Ich habe schonmal daran gedacht, dass man noch ein eindeutigen Namen mit in den type rein nimmt, so in etwa: 
sprite1=Createsprite (xPos,yPos,xTex,yTex,width,height, layer, NAME="sprite1")

Perfekt ist das irgendwie noch nicht.