Funktion erst nach Verwendung deklariert



  • Hallo!

    Ich bin neu hier.

    Ich "bastel" gerade ein bisschen mit Allegro und habe ein Problem. Ich wil aus einer Funktion eine andere Funktion aufrufen,
    die aber unterhalb steht. Der Compiler meckert jetzt, dass er die Funktion nicht kennt. Da ich das Problem schon früher hatte, wende ich mich jetzt an die Profis. Wie kann ich dieses Problem systematisch und nicht durch verschieben des Programmcodes lösen.

    Frage 1b: Wenn ich eine Funktion "überladen" bzw. in diesem Fall unterladen will, reicht es, die verschiedenen Definitionen der Funktionen aufzuschreiben und gut is', oder muss man da noch mehr beachten?!

    Wäre schön wenn mir jemand helfen könnte.



  • Der Supercoder schrieb:

    Hallo!

    Ich bin neu hier.

    Ich "bastel" gerade ein bisschen mit Allegro und habe ein Problem. Ich wil aus einer Funktion eine andere Funktion aufrufen,
    die aber unterhalb steht. Der Compiler meckert jetzt, dass er die Funktion nicht kennt. Da ich das Problem schon früher hatte, wende ich mich jetzt an die Profis. Wie kann ich dieses Problem systematisch und nicht durch verschieben des Programmcodes lösen.

    Frage 1b: Wenn ich eine Funktion "überladen" bzw. in diesem Fall unterladen will, reicht es, die verschiedenen Definitionen der Funktionen aufzuschreiben und gut is', oder muss man da noch mehr beachten?!

    Wäre schön wenn mir jemand helfen könnte.

    Einfach ganz oben:

    void meineFunction(parameter);

    Und zur zweiten Frage: Probiers doch einfach mal 😃



  • Der Supercoder schrieb:

    Ich "bastel" gerade ein bisschen mit Allegro und habe ein Problem. Ich wil aus einer Funktion eine andere Funktion aufrufen,
    die aber unterhalb steht. Der Compiler meckert jetzt, dass er die Funktion nicht kennt. Da ich das Problem schon früher hatte, wende ich mich jetzt an die Profis. Wie kann ich dieses Problem systematisch und nicht durch verschieben des Programmcodes lösen.

    Ja, das geht so:

    #include <iostream>
    
    // Der Trick:
    void func1(int a);
    void func2(int b);
    void func3(int c);
    
    int main()
    {
     func1(100);
    }
    
    void func1(int a)
    {
     func3(a);
    }
    
    void func2(int b)
    {
     std::cout << b << std::endl;
    }
    
    void func3(int c)
    {
     func2(c);
    }
    


  • Vielen Dank.



  • Das untere sind übrigens Funktionsdefinitionen und keine Deklarationen. Deklarationen sind das, was oben steht.



  • Der Trick dabei ist, dass Du erst den Prototyp deiner Funktion nennst. Dann ist diese bekannt.

    Bei der Überladung dürfen die Signaturen nicht identisch sein.

    lg, freakC++



  • Und was genau ist eine Signatur??



  • drakon schrieb:

    Das untere sind übrigens Funktionsdefinitionen und keine Deklarationen.

    Genau genommen sind Definitionen auch Deklarationen. 😉

    Der Supercoder schrieb:

    Und was genau ist eine Signatur??

    Die Signatur einer Funktion besteht aus Name und Parametertypen. Insbesondere gehört der Rückgabewert nicht dazu.



  • Nexus schrieb:

    drakon schrieb:

    Das untere sind übrigens Funktionsdefinitionen und keine Deklarationen.

    Genau genommen sind Definitionen auch Deklarationen. 😉

    Jap, aber man sagt ja üblicherweise das meist-qualifizierende. 😉
    Wenn dich jemand frägt wer denn der Typ zu Hause ist, dann sagst ja auch, dass das dein Papa ist und nicht einfach nur "ein Mensch". 😃

    Das "keine Deklarationen" könnte man aber weglassen ja.



  • Ich weiss zwar nicht warum Du rückwärts zick-zack läufst, aber deine Tipps haben geholfen. Funzt jetzt alles.

    Vielen Dank.


Anmelden zum Antworten