GLBasic forum

Main forum => Bug Reports => Topic started by: Zapper on 2007-Dec-25

Title: Forward Deklarationen?
Post by: Zapper on 2007-Dec-25
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. :)
Title: Forward Deklarationen?
Post by: Kitty Hello on 2007-Dec-25
Nein. Bitte ein kleines BSP posten, das fehlschlägt.
Title: Forward Deklarationen?
Post by: Schranz0r on 2007-Dec-25
Die Types auch Global gesetzt ?
Title: Forward Deklarationen?
Post by: Zapper on 2007-Dec-25
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?)
Title: Forward Deklarationen?
Post by: Schranz0r on 2007-Dec-25
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
Title: Forward Deklarationen?
Post by: Zapper on 2007-Dec-26
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? :)
Title: Forward Deklarationen?
Post by: trucidare on 2007-Dec-26
rechte maustaste in datei b und dann zum projekt hinzufügen
Title: Forward Deklarationen?
Post by: Zapper on 2007-Dec-26
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
Title: Forward Deklarationen?
Post by: Schranz0r on 2007-Dec-26
und Semikollon musst du nicht machen in GLB

und DIMPUSH aBalls[], foo !!

das erste muss ein Array sein !
Title: Forward Deklarationen?
Post by: Zapper on 2007-Dec-26
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?
Title: Forward Deklarationen?
Post by: Kitty Hello on 2007-Dec-27
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.
Title: Forward Deklarationen?
Post by: Schranz0r on 2007-Dec-27
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
Title: Forward Deklarationen?
Post by: Zapper on 2007-Dec-27
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?
Title: Forward Deklarationen?
Post by: Kitty Hello on 2007-Dec-27
Referenz fehlt :/
Bitte poste immer den Code dazu.
Title: Forward Deklarationen?
Post by: Zapper on 2007-Dec-27
Oh, natuerlich: Hier (http://czapper.dyndns.org/Blox.zip)
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 (http://www.zshare.net/download/59621393184304/).
Title: Forward Deklarationen?
Post by: Kitty Hello on 2007-Dec-29
Oh, that was a bad one!
In function CreateGameObject: ...

Code (glbasic) Select
FUNCTION CreateGameObject: iNewType, iX, iY, iXDir,iYDir
LOCAL pNew AS TGAMEOBJECT
        ...
RETURN pNew
ENDFUNCTION
See the mistake? You return a TYPE in a function returning a numnber. Thus:
Code (glbasic) Select
FUNCTION CreateGameObject AS TGAMEOBJECT: iNewType, iX, iY, iXDir,iYDirshould work.
...and i does! Yay!
I try making this error more obvious in a new version.
Title: Forward Deklarationen?
Post by: Zapper on 2007-Dec-29
Oh, indeed. Thanks
Any use in switching to english? :)
Title: Forward Deklarationen?
Post by: Kitty Hello on 2007-Dec-29
On Tschuldigung. Ich hab immer 5 Tabs gleichzeitig auf, da komm ich manchmal durcheinander ;)