El indexador Eclipse CDT no conoce los contenedores C ++ 11

Configuré un proyecto de C ++ 11 en Eclipse CDT para usar gcc-4.7. No es el comstackdor predeterminado en mi sistema, que no es compatible con C ++ 11. Para que la comstackción funcione, necesito pasar la bandera -std=c++11 y también incluir la siguiente ruta de encabezado: /usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2

Cada vez que uso C ++ 11 tipos de contenedor como std::unordered_set o std::unordered_map , el indexador de CDT se queja: El Symbol unordered_set could not be resolved . ¿Cómo puedo decirle al indexador que resuelva estos símbolos correctamente?

Así es como he configurado mi indexador:

enter image description here

Por lo que entiendo la configuración, se supone que el indexador usa la configuración del comstackdor de la configuración de comstackción actualmente activa. La comstackción funciona bien, entonces, ¿por qué no indexar también?

Como se describe en esta publicación en el foro:

http://www.eclipse.org/forums/index.php/mv/msg/282618/

  • haga clic derecho en el proyecto y vaya a “Propiedades” C / C ++ General -> Rutas y símbolos -> Símbolos -> GNU C ++.
  • Haga clic en “Agregar …” y pegue __GXX_EXPERIMENTAL_CXX0X__ en “Nombre” y deje “Valor” en blanco. Presione Aplicar, haga lo que le pida, luego presione OK.

La configuración de **__GXX_EXPERIMENTAL_CXX0X__** no ayuda en mi caso (julio de 2014, Eclipse Kepler 20130919, Ubuntu 12.04).

Para corregir el resaltado de syntax de C ++ 11 vaya a:

Propiedades del proyecto -> C / C ++ General -> Rutas y símbolos -> Símbolos -> GNU C ++

y sobrescribe el símbolo (es decir, agrega un nuevo símbolo):

 __cplusplus 

con valor

 201103L 

ACTUALIZADO: Si utilizas la versión más nueva de Eclispe (a partir de 2016) y aún experimentas el mismo problema, prueba el valor (como señaló jose.diego):

 201402L 

Asegúrese de que el indexador esté habilitado en la configuración del proyecto ( C / C ++ general -> indexador )

Luego reindexe ( Proyecto -> Índice C / C ++ -> Reconstruir )

si el problema aún persiste reindexe una vez más. Debería funcionar ahora.

Resolví este problema recientemente después de un poco de suerte en Google.

Haga clic en su proyecto y haga clic derecho-> Propiedades

Seleccione “C / C ++ General -> Procesador Incluir rutas, macros, etc …”

Seleccione la pestaña “Proveedores”

Deseleccione todo excepto “Entradas de configuración de usuario CDT” y “Configuración de comstackdor incorporado CDT GCC”

Haga clic en “Configuración del comstackdor incorporado CDT GCC”

Deseleccione “Usar proveedor global compartido entre proyectos”

Edite el cuadro en la parte inferior con la etiqueta “Comando para obtener las especificaciones del comstackdor”

Insertar en el comando -std = c ++ 11 por lo que se ve algo como esto:

 ${COMMAND} -std=c++11 -E -P -v -dD "${INPUTS}" 

Haga clic en Aplicar y en Aceptar.

enter image description here

Eso funcionó para mí. Probablemente necesites volver a indexar el proyecto.

O ir a:

  • C / C ++ Build-> Discovery Options-> GCC C ++ Compiler

  • agregue sus banderas a los argumentos de invocación del comstackdor. como -std = c ++ 11 -m32

  • Descubra las entradas descubiertas ahora: haga clic en Borrar

  • reconstruir el proyecto

Después de eso, TODOS los símbolos se actualizarán con los valores correctos y el indexador debería funcionar según lo previsto

La solución para mí, con un proyecto que utiliza un generador externo, era definir el símbolo:

__cplusplus

con el valor:

201403

en el proyecto: Caminos y símbolos -> Símbolos / GNU C ++.

Esto funcionó en eclipse Kepler CDT Version: 8.3.0.201402142303.

Vea esta guía :

  1. C / C ++ Build-> Settings-> GCC C ++ Compiler-> Dialect
  2. Elija “ISO C ++ 11 (-std = c ++ 0x)” en “estándar de idioma” Lenguaje y dialecto
  3. Aplicar y OK
  4. Reconstruye el proyecto y funciona 🙂

El siguiente funciona en Eclipse C/C++ Oxygen .2 con gcc-5.5.0

Eclipse Properties->C/C++ Build->Settings->GCC C++ Compiler->Dialect->Other dialect flags: -std=c++17

No recoja nada en la lista desplegable de Language standard .