brauche Debughilfe // gelöst -> *lösch mich*

Previous topic - Next topic

monono

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!

monono

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:

Schranz0r

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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

monono

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.

Schranz0r

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 :)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

monono

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.