Forward Deklarationen?

Previous topic - Next topic

Zapper

Guten Tag,
bei mir gibt es irgendwie Probleme damit, dass, wenn ich zum Beispiel eine Funktion A habe. Und ein Type B. Wenn ich nun in dem Type B die Funktion A verwende und in der Funktion A den Typenamen benutze, beschwert der Prekompiler sich darueber, dass der Typename nicht definiert ist (error : call to undefined function : BoundBy).
Muss ich die Funktion irgendwie vor der Typedefinition extra deklarieren oder so?
Mit GLBasic habe ich gerade erst angefangen und komme von C++. Kann also sein, dass ich auch irgendwas ganz triviales nicht beachtet habe oder so. :)

Kitty Hello

Nein. Bitte ein kleines BSP posten, das fehlschlägt.

Schranz0r

Die Types auch Global gesetzt ?
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

Zapper

Beim Versuch das Minimalprogramm zu bauen bin ich jetzt auf was anderes gestossen, das ich mir genauso wenig erklaeren kann. :)

QuoteTYPE TFOO
   iSomeRandomVal=SomeRandomNumber();
ENDTYPE

FUNCTION SomeRandomNumber:
   RETURN RND(10);
ENDFUNCTION
Die Meldung ist error: `SomeRandomNumber' was not declared in this scope
Obwohl der Funktionsname in der Typedefinition doch auch bekannt sein sollte(?)

PS: Schranz0r, ja, wenn ich nicht versagt habe, sollte GLOBAL aBalls[] AS TBALL; doch gehen, oder? (Bzw sollten die Funktionen unabhaengig davon in der Typedefinition verfuegbar sein?)

Schranz0r

hmm ne geht nur so :

Code (glbasic) Select
TYPE TFOO
    iSomeRandomVal
ENDTYPE

GLOBAL FO[] AS TFOO
GLOBAL X AS TFOO

X.iSomeRandomVal = SomeRandomNumber()

DIMPUSH FO[],X

....

FUNCTION SomeRandomNumber:
    RETURN RND(10);
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

Zapper

Ich habe noch ein Problem, das aehnlich ist:
Ich habe in einem Projekt mehrere Dateien. Wenn ich in Datei A eine Funktion aufrufe, die es nur in Datei B gibt, bekomme ich error : call to undefined function. Wenn ich die Funktion an das Ende von Datei A kopiere, dann gehts. Eigentlich sollte der doch automatisch alle Dateien parsen vor dem kompilieren?

Und noch ein Problem:
QuoteTYPE TBALL
       //... Inhalt
ENDTYPE

GLOBAL aBalls[] AS TBALL;

LET i=20;
WHILE(i > 0)
   LOCAL foo AS TBALL
   foo.xDir=RandomX(-50,50);
   foo.yDir=RandomX(-50,50);
   DIMPUSH(aBalls,foo);
   i=i-1;
WEND
Ich bekomme die Fehlermeldung error : wrong argument type : DIMPUSH, arg no: 2. Meine Frage: Warum? :)

trucidare

rechte maustaste in datei b und dann zum projekt hinzufügen
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Zapper

Oh, verdammt, ich habe angenommen, dass Dateien, die ich waerend einer Projektbearbeitung erstelle (die dann auch automatisch geoeffnet werden, wenn das Projekt geoeffnet wird) zum Projekt gehoeren

Schranz0r

und Semikollon musst du nicht machen in GLB

und DIMPUSH aBalls[], foo !!

das erste muss ein Array sein !
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

Zapper

Uh, ja, das Problem waren auch die Klammern um aBalls[],foo. Zusaetzlich zu dem Array. DIMPUSH ist also garkeine Funktion in dem Sinne? Bzw kann ich auch eigene Funktionen ohne Klammern aufrufen? Sind Klammern in GLBasic also mehr fuer logische Operationen und Mathe?

Kitty Hello

Nein. FUNCTION foo:a
...
foo(42)
muss schon so sein. Aber die "grünen" Funktionen (eingebaut) muss man ohne Klammern aufrufen, wenn kein Rückgabewert gefordert ist.

Schranz0r

Ach sag bloß, das GLBasic Befehle(eingebaut) nur einen wert zurückliefern, wenn man die Werte in eine Klammer eintragen muss?
Ist mir jetzt garnicht mal so aufgefallen :D
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

Zapper

Hm, ich hab wieder was neues (und hab keine Lust einen neuen Thread zu oeffnen :) ):
Ich bekomme den Parserfehler TGameObject.gbas"(1) error : wrong argument type : .
Aber die Zeile, in der der Fehler sein soll ist immer die zweite der Datei TGameObject.gbas. Selbst, wenn die Zeile leer ist. Was ist das los? :)

PS: Gibt es eigentlich irgendwo eine Compilermeldungenreferenz?

Kitty Hello

Referenz fehlt :/
Bitte poste immer den Code dazu.

Zapper

Oh, natuerlich: Hier
Ist das zweite Program, das ich testweise in der Sprache mache, der Stil kann also ein wenig.. rustikal wirken :)
Und MiscFunctions.gbas wird wahrscheinlich von dem Projekt in einem anderen Ordner erwartet und muss vielleicht nochmal zum projekt hinzugefuegt werden.
Im Moment liegt die Datei auf meinem Apachen, wenn ich irgendwann den PC ausmache und es bis dahin noch keine Loesung gab, verfrachte ich die Datei auf irgendeinen Hoster

Edit: Hochgeladen auf Z-Share.