Cómo habilitar C++11 en Eclipse Juno/Kepler/Luna CDT?


EDITAR: Resulta que esto realmente no es específico de Eclipse Kepler. Tuve que usar el mismo proceso para Eclipse Juno. El problema fue que parece que faltan pasos en otros posts que responden a esta misma pregunta.

Estoy usando Eclipse Kepler para C++ y estoy tratando de usar C++11 y obtener errores. Cuando compilo obtengo el error

Error: los bucles for basados en rango no están permitidos en el modo C++98

He seguido las instrucciones del post

Eclipse CDT Compatibilidad con C++11/C++0x

Y la solución dada para Eclipse Juno no está funcionando.

Diferentes comentarios han sugerido reiniciar eclipse y limpiar y reconstruir. Eso no ha cambiado nada.

8 answers

Hay dos cosas que tiene que hacer, primero necesita configurar su compilador, luego necesita configurar el procesador de lenguaje de CDT. Dado que no mencionaste qué compilador estás usando, asumiré que es GCC, pero los pasos serán similares para otros compiladores. (Tenga en cuenta que necesita un compilador que soporte C++11, por supuesto.)

Configurar el compilador es bastante sencillo:

  1. Haga clic derecho en su proyecto y haga clic en Propiedades
  2. En C / C++ Build haga clic en Preferencias
  3. En el compilador GCC C++, haga clic en Misceláneos
  4. En el cuadro Otros indicadores, añada "-std=c++11" a la lista de tokens.
  5. Haga clic en Aplicar y Aceptar

En este punto debería ser capaz de reconstruir su proyecto y hacer que se ejecute. Pero CDT todavía puede mostrar errores para C++11 includes. Así es como puedes resolver eso:

  1. Haga clic derecho en su proyecto y haga clic en Propiedades
  2. En C / C++ General haga clic en " Preprocesador Incluir rutas, Macros "
  3. Seleccione la pestaña Proveedores
  4. Debería haber un elemento en la lista que diga algo como "GCC Built in Compiler Settings". Seleccione esta entrada.
  5. Desmarque la opción "Usar proveedor global..."opción
  6. Debajo de la lista hay un cuadro que dice "Comando para obtener especificaciones del compilador."Append" - std = c++0x " a esto.
  7. Mueva el proveedor "GCC Built in Compiler Settings" en la parte superior de la lista usando el botón 'Mover hacia arriba' a la derecha.
  8. Haga clic en Aplicar y luego OK.
  9. De vuelta en su espacio de trabajo Eclipse, seleccione el Menú Proyecto, el Índice C/C++ y haga clic en "Volver a resolver inclusiones no resueltas"."
 179
Author: MrEricSir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-10 20:25:47

Compatibilidad con C++11 en Eclipse Kepler Service Release 1 (Build id: 20130919-0819)

En la última versión de Eclipse Kepler SR1 solo tienes que añadir - std = c++11

  1. Haga clic derecho en su proyecto y haga clic en Propiedades
  2. Vaya a C/C++ General y El Preprocesador Incluye rutas, Macros, etc.
  3. Seleccione la pestaña Proveedores
  4. Add - std = c++11 to Comando para obtener el compilador especificaciones:
  5. Aplicar cambios, el Índice debe generarse automáticamente.

El "Comando para obtener las especificaciones del compilador:" - la línea debería tener el aspecto de:

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
 25
Author: MeJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-20 16:27:30

A partir de CDT 8.3 (disponible como una actualización de Kepler ), hay una nueva opción de dialecto en la configuración de compilación:

Http://wiki.eclipse.org/CDT/User/NewIn83#Build

 13
Author: Tobu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-18 13:05:29

Utilizo Eclipse Kepler y para arreglarlo hice esto:

1-Haga clic derecho en el Proyecto > > Proprietes > > C / C++ Build:: Settings

2-Fue al compilador Gcc G++ > > Miscelánea > > Otras banderas

 i then added -std=c++11 
 hit apply and ok

Eso solucionó mi problema!

Espero que ayude!

 6
Author: LandKingdom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-27 00:14:24

Ejecutando eclipse indigo y cdt 8.0.2 aquí. Seguí todas las guías, pero todavía era necesario configurar el preprocesador define a mano para encontrar cosas como std::unique_ptr. El archivo de inclusión "memoria" comprueba esto. Establezca _ _ cplusplus a 201103L en la pestaña" Símbolos "bajo" Rutas y símbolos "en" C++ General " en propiedades del proyecto.

 4
Author: David Karla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-07 18:05:17

Agregar el indicador de dialecto "-std=c++11" a las propiedades del proyecto-> C/C++ Build -> Settings -> Tool settings (GCC C++ Compiler -> Dialect) resolvió mi problema en Eclipse Kepler, aparte de los ajustes indicados anteriormente.

 2
Author: mluthra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-02 23:31:49

Estoy usando Eclipse Luna y no hay "Configuración de herramientas" en C/C++ Build -> Settings. I DID add-std=c++11 to the compiler specs command line under "C/C++ General -> Preprocessor Includes -> Providers" as suggested. Pero eso todavía no satisfizo la capacidad de mi indexador para resolver emplace().

Así que busqué en el archivo de encabezado y encontré que las funciones de emplace dependen de _ _ cplusplus > = 201103L. Así que solo agregué el símbolo de preprocesador "_ _ cplusplus " y di es el valor 201103.

Un poco hackish pero el indexador está feliz. (Y makefiles definen mis banderas de compilación, no el proyecto eclipse)

 1
Author: Miles F. Bintz II,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-04 17:41:24

La solución proporcionada por MrEricSir solo funciona después de tener instalado el último Eclipse Oxygen CDT. No funciona para mí con Mars CDT.

 0
Author: user164969,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-06 23:17:40