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
-
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.