2012-06-13 7 views
5

Ich habe einige ziemlich seltsame Fehler beim Kompilieren von Code unter gcc. Es sagt mir, dass std::function nicht existiert.Funktion ist kein Element von Std.

Ich kann den Fehler mit dem folgenden Code erstellen:

#include <functional> 
#include <stdio.h> 

void test(){ printf ("test"); } 

int main() { 
    std::function<void()> f; 
    f = test; 
    f(); 
} 

Wenn ich gcc laufen (von Cygwin.): (Meine Fehlermeldung war Deutsch, so dass ich es übersetzte es klingt anders auf Englisch verfügbar sein gcc)

$ gcc test.cpp 
test.cpp: in function "int main(): 
test.cpp:7:3: Error: "function" is not an element of "std"« 
test.cpp:7:25: Error: "f" was not defined in this scope 

Mit MSVC kompiliert es erfolgreich. Bitte sagen Sie mir, was ich in meinem Code falsch mache.

Johannes

+1

Kompilieren Sie mit C++ 11? – chris

+0

nein, wenn ich'gcc -std = C++ 0x test.cpp 'es wirft eine Reihe von Linker-Fehler, die ich nicht verstehen konnte – EGOrecords

+0

Sie brauchen 'g ++', nicht 'gcc', siehe Antworten unten. – juanchopanza

Antwort

13

Kompilieren es als:

g++ test.cpp -std=c++0x 

-std=c++0x benötigt wird, weil Sie C++ 11-Funktionen verwenden, sonst g++ test.cpp genügt.

Stellen Sie sicher, dass Sie die neueste Version von GCC haben. Sie können überprüfen Sie die Version als:

g++ --version 
+1

"Wenn Sie gcc test.cpp verwenden, nimmt es C-Programm an!" Nicht wahr. gcc leitet die Sprache von der Dateierweiterung ab. Wenn es ein C-Programm annimmt, würde die Fehlermeldung sehr unterschiedlich sein. 'std :: function' wäre ein Syntaxfehler in C. Es würde keine Meldung über' function' erzeugt, die nicht im 'std' Namespace existiert. Was wahr ist, ist, dass 'gcc' (im Gegensatz zu' g ++ ') nicht automatisch mit der C++ - Standardbibliothek verknüpft wird, sodass Linkerfehler auftreten, wenn Sie das entsprechende Flag -l nicht manuell angeben. – sepp2k

3

Sie müssen in C++-Modus und in C++11 Modus kompilieren. Sie benötigen also g++ und das -std-Flag auf c++0x gesetzt.

g ++ test.cpp -std = C++ 0x

Sie auch -std=c++11 von gcc 4.7 ab verwenden können.

Verwandte Themen