Fehler mit Funktionszeigerliste



  • int f(int a) {return a+1;}
    int g(int a) {return a+2;}
    
    const auto Funktionszeigerliste = {f,g}
    int main()
    {
      int i = 0;
      for (auto Funktionszeiger: Funktionszeigerliste)
      {
        i += Funktionszeiger(1);
      }
    }
    

    gibt den Fehler:

    clang++ -std=c++11 test.cpp
    test.cpp:4:35: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>
    const auto Funktionszeigerliste = {f,g}
                                      ^
    test.cpp:4:40: error: expected ';' after top level declarator
    const auto Funktionszeigerliste = {f,g}
                                           ^
                                           ;
    test.cpp:10:25: error: called object type 'auto' is not a function or function pointer
        i += Funktionszeiger(1);
             ~~~~~~~~~~~~~~~^
    3 errors generated.
    

    Wie korrigiere ich das?



  • Sorry, da fehlt ein ; und der Fehler ist

    clang++ -std=c++11 test.cpp
    test.cpp:4:35: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>
    const auto Funktionszeigerliste = {f,g};
                                      ^
    test.cpp:10:25: error: called object type 'auto' is not a function or function pointer
        i += Funktionszeiger(1);
             ~~~~~~~~~~~~~~~^
    2 errors generated.
    


  • test.cpp:4:35: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>



  • error: cannot deduce actual type for variable '...' with type 'auto const' from initializer list
    
    error: called object type 'auto' is not a function or function pointer
    

    das ist generell mein Fehler: die erste Meldung bei der Definition des Funktionszeigerarrays und die zweite beim Aufruf des Funktionszeigers.



  • Und da hilft auch #include <initializer_list> nicht



  • Ich habe mal folgendes probiert:

    const decltype(&f) Funktionszeigerliste = {f,g};
    

    Dann kommt:

    error: excess elements in scalar initializer
    


  • Strange der Fehler scheint bei mir zu sein, dass es noch eine weitere Funktion f mit demselben Namen, aber einer anderen Signatur gibt.



  • Wie kann man das lösen? Man müsste irgendwie mit decltype die Signatur der Funktionen festlegen...



  • Geht das?

    int(*Funktionszeigerliste[])(int) = {f,g};
    


  • Sorry ich bin zu blöd, bei einem Benutzernamen zu bleiben. Ich führe hier nur Selbstgespräche...

    Ignoriert mich einfach, bis ich meine Identitätskrise überwunden habe.

    Danke,
    sfsdfdsdf


  • Mod

    Ich kann den Fehler nicht nachvollziehen. clang 3.4 mit -std=c++11 (und -std=c++1y) kompilieren nach korrigieren von zwei Kleinigkeiten (<initializer_list> und ein fehlendes Semikolon) den Code im OP problemlos.

    Ich sehe auch kein sonst kein Problem.


Anmelden zum Antworten