Wie kann ich eine Funktion in einer Funktion definieren?



  • Hallo zusammen

    Ich habe eine Frage, wie kann ich eine Funktion in einer Funktion definieren? Denn wenn ich es so mache:

    void Create Window (......)
    {
       int WINAPI WinMain (...., ...., ..., ....)
       {
          ....
       }
    
    }
    

    Dann kommt immer eine Fehlermedlung, wie kann ich das ändern?

    Gruss Patrick



  • Das geht nicht.



  • Wenn es unbedingt sein muss (was ich bezweifle) machs über eine statische Membermethode einer Klasse in einer Funktion. 😉



  • Erzähl doch lieber was du damit erreichen willst. Kleine Analogie:

    du willst auf den berg und fragst "wie kann ich auf den Berg fliegen?" - die Antwort ist klar, du kannst nicht fliegen. Es geht einfach nicht. Aber wie du auf andere Art auf den Berg kommst kann dir jemand erzählen.
    Leider wissen wir nicht was du mit der Funktion in der Funktion erreichen willst (auf welchen Berg du möchtest), also musst du die Frage anders stellen. Auf welchen Berg möchtest du? 😉

    Btw., einen Workaround gibts allerdings:

    //so gehts nicht
    void outer(int i)
    {
      int inner(bool b, float f)  { /*.do.somerthing.*/ } //FEHLER!
      int y = i + inner(true, 13.0); //schön waers gewesen...
    }
    
    //so gehts aber:
    void outer(int i)
    {
      struct {  //unnamed local struct
      int operator()(bool b, bloat f) { /*.do.something.*/ }
      } inner; //inner ist die einzige Instanz
    
      int y = i + inner(true, 13.0); //aha, jetzt gehts!
    }
    

    Zur Erinnerung: lokale Klassen in einer Funktion können auf alle statischen Variablen in dieser Funktion zugreifen, allerdings nicht auf die nichtstatischen Variablen.



  • Ich will damit erreichen, das ich eine Funktion schreiben kann, die man danach benötigen kann um ein Fenster zu zeichen. Zweck, man benötigt nicht immer so viel Zeit.

    Gruss Patrick



  • Eglifisch1 schrieb:

    Ich will damit erreichen, das ich eine Funktion schreiben kann, die man danach benötigen kann um ein Fenster zu zeichen. Zweck, man benötigt nicht immer so viel Zeit.

    Gruss Patrick

    😕

    Das riecht jetzt verdammt komisch..



  • Das riecht nach von einem Kollegen vermitteltem Halbwissen, geäussert, ohne zu wissen, worum es eigentlich geht. 😃

    @OP:
    Also, um eine Funktion zu benötigen, brauchst Du die erstmal garnicht schreiben. Die Notwendigkeit ergibt sich sogar in den meisten Fällen bereits vorher. Und wieso sollte eine lokale Funktion weniger Zeit benötigen (wofür überhaupt, zum Schreiben oder zum Ausführen?!) als irgendeine andere?



  • Benutz doch inline, oder nicht ?

    inline int add (int n1, int n2)
    {
      return n1+n2;
    }
    
    int main (void)
    {
      return add(1,-1);
    }
    


  • Eglifisch1 schrieb:

    Ich will damit erreichen, das ich eine Funktion schreiben kann, die man danach benötigen kann um ein Fenster zu zeichen. Zweck, man benötigt nicht immer so viel Zeit.

    Gruss Patrick

    Ein Funktion braucht immer gleich viel Zeit, egal wo sie im Quelltext steht.



  • Er meinte nicht die Leistung des Programms, sondern die Zeit um den Quelltext zu schreiben.



  • lk schrieb:

    Benutz doch inline, oder nicht ?

    Nicht.

    Vertrau einfach deinem Compiler. Der weiß (besser), was er tut.


Anmelden zum Antworten