2012-06-13 20 views
5

Tengo algunos errores bastante extraños compilación de código en gcc. Me dice que std::function no existe.función no es un elemento de std

puedo recrear el error con el siguiente código:

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

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

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

Si me quedo gcc (de cygwin):. (Mi mensaje de error era alemán, así que lo tradujo Puede ser sonido diferente en un Inglés 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 

Con MSVC se compiló correctamente. Por favor dígame qué estoy haciendo mal en mi código.

Johannes

+1

¿Está compilando con C++ 11? – chris

+0

no, si hago'gcc -std = C++ 0x test.cpp' arroja un montón de errores del enlazador que no pude entender – EGOrecords

+0

Necesita 'g ++', no 'gcc', vea las respuestas a continuación. – juanchopanza

Respuesta

13

traducirlo como:

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

-std=c++0x es necesaria porque estás usando C++ 11 rasgos, de lo contrario g++ test.cpp es suficiente.

Asegúrate de tener la última versión de GCC. Puede comprobar la versión como:

g++ --version 
+1

"Si usa gcc test.cpp, entonces asume el programa C!" No es verdad. gcc infiere el idioma de la extensión del archivo. Si asumió un programa C, el mensaje de error sería bastante diferente. 'std :: function' sería un error de sintaxis en C. No produciría un mensaje sobre' function' que no existe en el espacio de nombres 'std'. Lo que es cierto es que 'gcc' (a diferencia de' g ++ ') no enlaza automáticamente con la biblioteca estándar de C++, por lo que obtendría errores de enlazador si no especifica el indicador -l correspondiente manualmente. – sepp2k

3

Se necesita compilar en C++ modo y en el modo de C++11. Por lo tanto, necesita g++ y la bandera -std establecida en c++0x.

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

También puede utilizar -std=c++11 de gcc 4.7 en adelante.

Cuestiones relacionadas