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

85

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

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

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

He seguido las instrucciones de la publicación.

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

y la solución dada para Eclipse Juno no funciona.

Diferentes comentarios han sugerido reiniciar eclipse y limpiar y reconstruir. Eso no ha hecho ninguna diferencia.

user327301
fuente

Respuestas:

183

Hay dos cosas que tienes que hacer, primero necesitas configurar tu compilador, luego necesitas configurar el procesador de idioma de CDT. Como no mencionó qué compilador está utilizando, asumiré que es GCC, pero los pasos serán similares para otros compiladores. (Tenga en cuenta que, por supuesto, necesita un compilador que admita C ++ 11).

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 Configuración
  3. En el compilador GCC C ++, haga clic en Varios
  4. En el cuadro Otras banderas, agregue "-std = c ++ 11" a la lista de tokens.
  5. Haga clic en Aplicar y Aceptar

En este punto, debería poder reconstruir su proyecto y hacer que se ejecute. Pero CDT aún puede mostrar errores para C ++ 11 incluye. He aquí cómo puede resolver eso:

  1. Haga clic derecho en su proyecto y haga clic en Propiedades
  2. En C / C ++ General, haga clic en "El preprocesador incluye rutas, macros"
  3. Seleccione la pestaña Proveedores
  4. Debería haber un elemento en la lista que diga algo como "Configuración del compilador integrado de GCC". Seleccione esta entrada.
  5. Desmarca la opción "Usar proveedor global ..."
  6. Debajo de la lista hay un cuadro que dice "Comando para obtener especificaciones del compilador". Agregue "-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 'Move Up' a la derecha.
  8. Haga clic en Aplicar y luego en Aceptar.
  9. De vuelta en su espacio de trabajo de Eclipse, seleccione el menú Proyecto, Índice C / C ++ y haga clic en "Volver a resolver las inclusiones no resueltas".
MrEricSir
fuente
1
Gracias. Esto funcionó. Tal vez leí mal la otra publicación a la que me vinculé, pero parece que no se mencionó la configuración del compilador en esa publicación.
user327301
1
No me funciona. Mi principal problema es que incluye c ++ 11 sin resolver. Puse -std=c++11donde dijiste que pusiera, y reconstruí el índice completo, todavía muestra una gran cantidad de std :: cout, std :: set, etc no
reconocidos
2
EDITAR: No encontré la primera parte donde debería, pero estoy compilando a través de make, por lo que puede ser una explicación. (Sin embargo, lo encontré en la configuración del espacio de trabajo y lo configuré). Pero lo puse en el compiler spec, y todavía no funciona. std :: shared_ptr y lo mismo no reconocido. Aunque solía funcionar en la máquina más antigua con juno.
Dolanor
1
En mi caso (gcc) utilicé -std = c ++ 0x. Entonces todo está funcionando. ¡Gracias!
Denis Zaikin
4
@MrEricSir ¿hay alguna manera de hacer esta configuración para el espacio de trabajo para que cuando agregue un nuevo proyecto también se aplique automáticamente?
Ivaylo Strandjev
25

Compatibilidad con C ++ 11 en Eclipse Kepler Service Release 1 (Id. De compilación: 20130919-0819)

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

  1. Haga clic derecho en su proyecto y haga clic en Propiedades
  2. Navegue a C / C ++ General y el preprocesador incluye rutas, macros, etc.
  3. Seleccione la pestaña Proveedores
  4. Agregue -std = c ++ 11 a Command para obtener las especificaciones del compilador:
  5. Aplicar cambios, el índice debe generarse automáticamente.

La línea "Comando para obtener las especificaciones del compilador:" debería verse así:

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
MeJ
fuente
2
Con GCC tuve que agregar -std = c ++ 0x
ccook
¿Qué GCC usas? c ++ 0X era el antiguo nombre (alias) de C ++ 11
MeJ
1
Encontré esto por segunda vez configurando un nuevo CDT de eclipse; configurar esto debería ser más intuitivo.
ccook
6

Yo uso Eclipse Kepler y para solucionarlo hice esto:

1 - Haga clic con el botón derecho en el Proyecto >> Propiedades >> C / C ++ Build :: Configuración

2 - Fue al compilador GCC G ++ >> Varios >> Otras banderas

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

¡Eso solucionó mi problema!

¡Espero que te haya ayudado!

Karrq
fuente
Esta es la mejor respuesta para la plataforma Eclipse, versión: 4.3.1 - ¡No sé qué es Kepler / Juno!
TCSGrad
Eclipse Kepler es Eclipse Versión 4.3.X
Karrq
4

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

David Karla
fuente
Sí, funciona para migraciones de proyectos antiguos.
Guy L
2

Agregar el indicador de dialecto "-std = c ++ 11" a las propiedades del proyecto-> Compilación de C / C ++ -> Configuración -> Configuración de herramientas (compilador de GCC C ++ -> Dialect) resolvió mi problema en Eclipse Kepler, aparte de las configuraciones indicadas anteriormente.

mluthra
fuente
1

Estoy usando Eclipse Luna y no hay "Configuración de herramientas" en C / C ++ Build -> Settings. I DID complemento -std = c ++ 11 a la línea de comandos del compilador especificaciones en "C / C ++ General -> preprocesador Incluye -> Proveedores" como se sugiere. Pero eso aún no satisfizo la capacidad de mi indexador para resolver emplace ().

Así que busqué en el archivo de encabezado y encontré que las funciones de emplazamiento dependen de __cplusplus> = 201103L. Así que acabo de agregar el símbolo del preprocesador "__cplusplus" y le di el valor 201103.

Un poco hackish pero el indexador está contento. (Y los archivos make definen mis banderas de compilación, no el proyecto eclipse)

Miles F. Bintz II
fuente
0

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

StndFish
fuente