2012-04-05 16 views
44

estoy corriendo Eclipse Helios y tengo g ++ - 4.6 instalado. Espero no estar equivocado que g ++ 4.6 implemente las características de C++ 11. Creé un proyecto de C++ que utiliza nullptr y palabras clave automáticas. La construcción da los siguientes errores: -C++ Error 'nullptr no fue declarada en este ámbito' en Eclipse IDE

../{filename}.cpp:13:13: error: ‘nullptr’ was not declared in this scope 

../{filename}.cpp:14:2: warning: ‘auto’ will change meaning in C++0x; please remove it [-Wc++0x-compat] 

En realidad, estaba construyendo bien hasta ayer. Estoy recibiendo esto de la nada hoy. Por favor ayudame a resolver este problema.

+0

¿Cuál es la versión exacta de g ++ y qué opciones de compilación está utilizando? –

+1

Por favor, publique una muestra de código que muestre este comportamiento, sin eso estamos tratando de leer hojas de té aquí. –

+0

Estoy usando g ++ 4.6, e imagino líneas de código como este: - int * ptr = nullptr; auto x = 123; –

Respuesta

16

Finalmente descubrimos qué hacer. Se agregó el argumento del compilador -std = C++ 0x en Propiedades del proyecto -> Compilación C/C++ -> Configuración -> Compilador GCC C++ -> Varios. ¡Ahora funciona!

Pero cómo agregar esta bandera por defecto para todos los proyectos de C++? ¿Nadie?

+0

¿Miraste Ventana -> Preferencias -> C/C++ -> Crear -> Configuración? – josephthomas

+1

No tengo esta opción tristemente. – user592748

+0

¿Cómo manejo esta situación con cmake? – UserK

4

¿Es eso un error de compilador real o un error de análisis de código? Algunas veces, el análisis del código puede ser un poco incompleto e informar errores no válidos.

Para desactivar el análisis de código para el proyecto, haga clic en su proyecto en el Explorador de proyectos, haga clic en Propiedades y, a continuación, vaya al directorio/C++ ficha General C, entonces el análisis de código. A continuación, haga clic en "Usar configuración del proyecto" y desactive los que no desea.

Además, ¿está seguro de que está compilando con el compilador de C++ 11?

+2

Subido para contrarrestar la votación downvote. Este es casi seguro el problema. –

+0

Gracias. Me he topado con este tema muchas veces, así que pensé que valía la pena mencionarlo. – josephthomas

+0

No veo un elemento de análisis de código en la pestaña General de C/C++ en mis propiedades de proyecto de Eclipse. Estoy usando g ++ 4.6. Espero que implemente las características de C++ 11, específicamente nullptr y auto. Gracias. –

43

Según la GCC page for C++11:

Para habilitar C++ 0x apoyo, agregar el parámetro de línea de comandos -std = C++ 0x a su g línea de comandos ++. O bien, para habilitar las extensiones de GNU además de las extensiones de C++ 0x, agregue -std = gnu ++ 0x a su línea de comandos de g ++. GCC 4.7 y posterior admiten -std = C++ 11 y -std = gnu ++ 11 también.

Did se compila con -std=gnu++0x?

+2

Intenté agregar -std = gnu ++ 0x y -std = C++ 0x parámetros de línea de comando pero obteniendo el mismo problema. Lo agregué en Propiedades del proyecto -> Compilación C/C++ -> Opciones de descubrimiento -> Argumentos de invocación del compilador. ¿Es ese el lugar correcto? –

+0

Probablemente, pero parece que la otra respuesta está más basada en la realidad. :) –

+0

Hola Rob, noté una cosa ahora. El IDE no recoge el argumento del compilador -std = C++ 0x aunque lo he agregado en Propiedades del proyecto -> Compilación C/C++ -> Opciones de descubrimiento -> Argumentos de invocación del compilador. Así que probé la construcción de la línea de comando 'g ++' ../CPP.cpp "-std = gnu ++ 0x -std = C++ 0x 'en un terminal y compila bien; produce el binario, que se ejecuta con éxito. Entonces el IDE no considera la opción del compilador especificada. El archivo MAKE generado no tiene el argumento del compilador -std = C++ 0x. ¡No estoy seguro de cómo forzar al IDE a considerar el argumento del compilador suministrado! –

0

está usando el g ++ versión 4.6 se debe invocar la bandera -std = C++ 0x para compilar

g ++ -std = C++ 0x * .cpp de salida -o

3

Ir a Ajustes -> Generador ... Y agregar el indicador de "tener g ++ sigue la venida C++ 0x ISO C++ lenguaje estándar [STD = C++ 0x]

0

agrego el", -std = C++ 0x "después de" -c -fmessage-length = 0 ", en Propiedades del proyecto -> C/C++ Build -> Configuración -> GCC C++ Compiler -> Miscellaneous. No olvides agregar la coma "," como el separador.

0

Tratando con una versión diferente de gcc trabajó para mí - gcc 4.9 en mi caso.

Cuestiones relacionadas