Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
Este es un ejemplo de una pieza de código C ++ 11:
auto text = std::unique_ptr<char[]>(new char[len]);
El editor de Eclipse se queja de:
Function 'unique_ptr' could not be resolved
La compilación de Makefile funciona bien. ¿Cómo hacer que Eclipse deje de quejarse de este tipo de errores?
c++
eclipse
c++11
eclipse-cdt
Mella
fuente
fuente
std::unique_ptr<char[]>
unique_ptr<char>
llamaríadelete
, lo que está mal desde que se creó connew[]
?delete
llamen, cuando necesitesdelete[]
llamar. Elunique_ptr<char>
asume que se está haciendo un puntero, que se elimina condelete
.unique_ptr<char[]>
espera una matriz, que se eliminadelete[]
correctamente.Respuestas:
Encontré este artículo en el foro de Eclipse, solo seguí esos pasos y funciona para mí. Estoy usando Eclipse Indigo 20110615-0604 en Windows con una configuración Cygwin.
-std=c++0x
(o para la versión más nueva del compilador-std=c++11
al final ... en lugar del compilador GCC C ++ también tengo el compilador Cygwin__GXX_EXPERIMENTAL_CXX0X__
(asegúrese de agregar y anteponer dos guiones bajos) en "Nombre" y deje en blanco "Valor".Ahora también hay una descripción de esto en las Preguntas frecuentes de Eclipse : Características de Eclipse Preguntas frecuentes / C ++ 11 .
Configuración de imagen de eclipse
fuente
&&
.Instrucciones para Eclipse CDT 4.4 Luna y 4.5 Mars
Primero, antes de crear el proyecto, configure el analizador sintáctico Eclipse:
Window
->Preferences
->C/C++
->Build
->Settings
->Discovery
->CDT GCC Build-in Compiler Settings
en el cuadro de texto titulado
Command to get compiler specs
agregar-std=c++11
Ahora puede crear un proyecto, la configuración depende del tipo de proyecto que haya creado:
Para proyectos creados como: Archivo -> Nuevo -> Proyecto -> C / C ++ -> Proyecto C ++
Haga clic derecho en el proyecto creado y abra
Properties
->C/C++ Build
->Settings
->Tool Settings
->GCC C++ Compiler
->Dialect
Poner
-std=c++11
en el cuadro de texto tituladoother dialect flags
o seleccionarISO C++11
delLanguage standard
menú desplegable.Para proyecto CMake
Generar archivos de proyecto eclipse (dentro de su proyecto)
Luego importe el directorio generado a eclipse como proyecto de eclipse estándar. Haga clic derecho en proyecto y abra
Properties
->C/C++ General
->Preprocessor Include Paths, Marcos etc.
->Providers
habilítelo
CDT GCC Build-in Compiler Settings
y muévalo más alto queContributed PathEntry Containers
(Esto es importante)Último paso común
recompilar, regenerar
Project
->C/C++ Index
y reiniciar Eclipse.fuente
-std=c++11
eraProject Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:
. Añade tu-std=c++11
a eso. Lo configuré en la configuración global del espacio de trabajo como sugerente, pero no se copió en la ubicación que describí anteriormente cuando creé un nuevoMakefile
proyecto.Actualización 2016:
A partir de gcc 6 ( cambios ), el dialecto predeterminado de C ++ es C ++ 14. Eso significa que a menos que explícitamente necesite un dialecto más nuevo o más antiguo que el anterior, ya no necesita hacer nada con eclipse.
Para luna y marte
Esta sección wiki de la comunidad incorpora la respuesta de Trismegistos;
1. Antes de crear el proyecto, configure el analizador sintáctico Eclipse:
Ventana -> Preferencias -> C / C ++ -> Compilación -> Configuración -> Descubrimiento -> Configuración del compilador de CDT GCC Build-in
en el cuadro de texto titulado Comando para obtener las especificaciones del compilador anexar
-std=c++14
2. Crear proyecto, la configuración depende del tipo de proyecto que haya creado:Para proyectos creados como: Archivo -> Nuevo -> Proyecto -> C / C ++ -> Proyecto C ++
Haga clic derecho en el proyecto creado y abra
Propiedades -> C / C ++ Build -> Configuración -> Configuración de herramienta -> Compilador GCC C ++ -> Dialecto
Ponga
-std=c++14
en el cuadro de texto titulado otras banderas de dialecto o seleccione ISO C ++ 11 en el menú desplegable Estándar de idioma.Ahora hay una nueva forma de resolver esto sin el truco GXX_EXPERIMENTAL.
Para las versiones más recientes : (Actualmente
Juno y KeplerLuna ):En las versiones más recientes de Juno, la configuración se encuentra en
Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.Versiones anteriores 2012/2013:
En C / C ++ Build (en la configuración del proyecto), busque la ruta de inclusión del preprocesador y vaya a la pestaña Proveedores . Anule la selección de todos excepto la configuración del compilador incorporado CDT GCC. A continuación, desmarque las entradas de configuración Compartir ... Agregue la opción -std = c ++ 11 al cuadro de texto llamado Comando para obtener las especificaciones del compilador.
Ir a caminos y símbolos. En Símbolos, haga clic en restaurar valores predeterminados y luego aplique.
Notas:
Eclipse es exigente con respecto a presionar aplicar, debe hacerlo cada vez que salga de una pestaña de configuración.
[Auto-promoción]: escribí mis propias instrucciones más detalladas basadas en lo anterior. http://scrupulousabstraction.tumblr.com/post/36441490955/eclipse-mingw-builds
Gracias al usuario
Nobody
en https://stackoverflow.com/a/13635080/1149664fuente
#ifndef __GXX_EXPERIMENTAL_CXX0X__
devuelve true y el código a continuación no se analiza. Cuando agrego__GXX_EXPERIMENTAL_CXX0X__
símbolos al proyecto, la matriz se resuelve pero las referencias de mi proyecto se confunden. ¿Cuál podría ser el problema aquí?Para el último (Juno) eclipse cdt lo siguiente funcionó para mí, no es necesario declararme
__GXX_EXPERIMENTAL_CXX0X__
. Esto funciona para el indexador CDT y como parámetro para el compilador:"nombre del proyecto" -> clic derecho -> propiedades:
C / C ++ General -> Preprocesador Incluir rutas, macros, etc. -> cambie a la pestaña denominada "Proveedores":
para "Configuración", seleccione "Liberar" (y luego "depurar")
apague todos los proveedores y simplemente seleccione "Configuración del compilador incorporado CDT GCC"
desmarque "Compartir entradas de configuración entre proyectos (proveedor global)"
en el "Comando para obtener las especificaciones del compilador:" agregar "-std = c ++ 11" sin las comillas (también puede funcionar con comillas)
presione aplicar y cierre las opciones
reconstruir el índice
Ahora todas las cosas relacionadas con c ++ 11 deben ser resueltas correctamente por el indexador.
win7 x64, último eclipse oficial con cdt mingw-w64 gcc 4.7.2 del proyecto mingwbuilds en sourceforge
fuente
Tuve el mismo problema en mi Eclipse Juno. Estos pasos resolvieron el problema:
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
.fuente
Para Eclipse CDT Kepler, ¿qué funcionó para mí?
std::thread
símbolo no resuelto es:Vaya a Preferencias-> C / C ++ -> Build-> Settings
Seleccione la pestaña Descubrimiento
Seleccione la configuración del compilador incorporado CDT GCC [Shared]
Agregue -std = c ++ 11 al campo "Comando para obtener las especificaciones del compilador:" como:
Agregando
-std=c++11
al proyectoProperties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
Flags no fue suficiente para Kepler, sin embargo, fue suficiente para versiones anteriores como Helios.fuente
Todavía no puedo comentar, así que estoy escribiendo mi propia respuesta:
Está relacionado con
__GXX_EXPERIMENTAL_CXX0X__
y es válido para Eclipse Juno y CDT 8.x.Algunas partes de esta respuesta ya están cubiertas en otras respuestas, pero quiero que sea coherente.
Para que sea posible construir usando stdc ++ 11, uno tiene que agregar un indicador específico para el compilador. Puede hacerlo a través de las propiedades del proyecto. Para modificar las propiedades del proyecto
RMB
yProject properties
oALT + ENTER
. Luego, C / C ++ Build -> Configuración -> Configuración de herramienta -> Compilador GCC C ++ -> Varios -> Otras banderas. Ponga -std = c ++ 11 al final de la línea, para GCC se verá algo como:-c -fmessage-length=0 -std=c++11
. Al agregar -stdc ++ 11, el compilador de banderas (GCC) declarará__GXX_EXPERIMENTAL_CXX0X__
por sí mismo.En este punto, puede construir un proyecto utilizando toda la bondad de C ++ 11.
El problema es que Eclipse tiene su propio analizador para verificar si hay errores, es por eso que todavía obtienes todos los errores desagradables en el editor de Eclipse, mientras que al mismo tiempo puedes construir y ejecutar proyectos sin ninguno. Hay una manera de resolver este problema declarando explícitamente el
__GXX_EXPERIMENTAL_CXX0X__
indicador para el proyecto, uno puede hacer eso (tal como dijo Carsten Greiner): C / C ++ General -> Trayectorias y símbolos -> Símbolos -> GNU C ++. Haga clic en "Agregar ..." y pasado__GXX_EXPERIMENTAL_CXX0X__
(asegúrese de agregar y anteponer dos guiones bajos) en "Nombre" y deje en blanco "Valor". Y ahora es la parte adicional que quería cubrir en el comentario a la primera respuesta, vaya a: C / C ++ General -> Preprocesador Incluir macros de ruta, etc. -> Proveedores, y seleccioneCDT Managed Build Setting Entries
luego haga clic en APLICAR y regrese a la pestaña Entradas, en GNU C ++ debería haber ahora Entradas de configuración de compilación administrada de CDT__GXX_EXPERIMENTAL_CXX0X__
.fuente
También tuve varios problemas (Ubuntu 13.04 de 64 bits, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Muchas cosas se mencionan anteriormente, lamento repetirlas, pero además tuve problemas para utilizar
como parte de c ++ 11 (agregar -pthread para el enlazador resuelve ese problema). De todos modos, finalmente estas configuraciones funcionaron bien:
Proyecto -> Propiedades -> C / C ++ Build -> Configuración -> Varios. Añade el
bandera para los compiladores GCC y G ++. Haz clic en Aplicar.
Para el enlazador, la misma ventana, Varios, banderas de enlazador, agregaron
bandera. Configuración de biblioteca compartida, nombre de objeto compartido, agregue el
bandera también Haz clic en Aplicar.
C / C ++ General -> Rutas y símbolos -> Símbolos TAB, GNU C ++ seleccionado, Agregue el
(sin valor)
bandera. Haz clic en Aplicar.
C / C ++ General -> Preprocesador Incluir rutas .. -> pestaña Proveedores: verificar
Configuración del compilador incorporado CDT GCC
y para "Comando para obtener especificaciones del compilador", agregue el
bandera. Desmarca Compartir. Haz clic en Aplicar.
Entradas de configuración de compilación de CDT Managages, verifique esto también. Desmarca los otros dos. Haz clic en Aplicar.
Volviendo a la pestaña Entradas, GNU C ++ CDT Managages Build Setting Entradas, ahora debería ver su agregado
entrada.
Eso es. Al codificar, escribir
ahora puede completar automáticamente la clase de subproceso, por ejemplo, las compilaciones deberían funcionar bien y no debería haber
en tiempo de ejecución.
fuente
Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous
paso que funcionó para mí. Muchas gracias: DNo sé si soy solo yo, la solución mejor clasificada no funciona para mí, mi versión de eclipse es simplemente la plataforma de eclipse normal instalada usando sudo apt-get install eclipse en Ubuntu Pero encontré una solución que adopta el método juntos tanto de la solución mejor clasificada como de la segunda, lo que hice para que funcione se describe a continuación (tenga en cuenta que los otros pasos, como crear un proyecto C ++, etc., se ignoran por simplicidad)
Una vez que haya creado el proyecto C ++
(1) C / C ++ General -> Trayectorias y símbolos -> Símbolos -> GNU C ++. Haga clic en "Agregar ..." y pegue GXX_EXPERIMENTAL_CXX0X (asegúrese de agregar y anteponer dos guiones bajos) en "Nombre" y deje en blanco "Valor".
(2) En C / C ++ Build (en la configuración del proyecto), busque la ruta de inclusión del preprocesador y vaya a la pestaña Proveedores. Anule la selección de todos excepto la configuración del compilador incorporado CDT GCC. A continuación, desmarque las entradas de configuración Compartir ... Agregue la opción -std = c ++ 11 al cuadro de texto llamado Comando para obtener las especificaciones del compilador
Después de realizar solo los pasos 2 y 2 anteriores, funciona, el eclipse puede resolver el unique_ptr, no sé por qué funciona esta solución, espero que pueda ayudar a las personas.
fuente
Eclipse C / C ++ no reconoce el símbolo
std::unique_ptr
aunque haya incluido el encabezado de memoria C ++ 11 en su archivo.Suponiendo que está utilizando el compilador GNU C ++, esto es lo que hice para solucionarlo:
Proyecto -> Propiedades -> C / C ++ General -> Rutas de inclusión del preprocesador -> GNU C ++ -> Entradas de configuración de usuario CDT
Haga clic en el botón "Agregar ..."
Seleccione "Macro de preprocesador" en el menú desplegable
Presione Aplicar, y luego OK para volver a su proyecto
Luego reconstruya su índice C ++: Proyectos -> Índice C / C ++ -> Reconstruir
fuente
Para mí en Eclipse Neon , seguí la respuesta de Trismegistos aquí arriba , PERO también agregué un paso adicional:
Presiona aplicar y OK.
Salud,
Chico.
fuente
fuente
Ni el hack ni la versión más limpia funcionan para Indigo. Se ignora el truco y faltan las opciones de configuración requeridas. Sin razón aparente, la compilación comenzó a funcionar después de no funcionar y no proporcionar ninguna razón útil. Al menos desde la línea de comando, obtengo resultados reproducibles.
fuente
Para obtener soporte para C ++ 14 en Eclipse Luna, puede seguir estos pasos:
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
, agregue "-std = c ++ 14"C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
, agregue "-std = c ++ 14"Reindexe su proyecto y finalmente reinicie Eclipse. Debería funcionar como se esperaba.
fuente
Lo resolví de esta manera en una Mac. Usé Homebrew para instalar la última versión de gcc / g ++. Aterrizan en / usr / local / bin con incluye en / usr / local / include.
CD en / usr / local / bin e hice un enlace simbólico de g ++ @ 7 lo que sea solo a g ++ porque ese bit es molesto.
Luego fui a MyProject -> Properties -> C / C ++ Build -> Settings -> GCC C ++ Compiler y cambié el comando de "g ++" a "/ usr / local / bin / g ++". Si decide no hacer el enlace simbólico, puede ser más específico.
Haz lo mismo para el enlazador.
Aplicar y Aplicar y cerrar. Deja que reconstruya el índice. Durante un tiempo, mostró una cantidad desalentadora de errores, pero creo que fue al construir índices. Mientras descubría los errores, todos desaparecieron sin más acción.
Creo que sin verificar que también podría entrar en Eclipse -> Propiedades -> C / C ++ -> Core Build Toolchains y editar aquellos con diferentes rutas, pero no estoy seguro de qué hará eso.
fuente
Tuve un problema similar al usar Eclipse C ++ 2019-03 para un proyecto mixto de C y C ++ que usaba std :: opcional y std :: swap. Lo que funcionó para mí fue esto. En el proyecto Propiedades-> C / C ++ Build-> Configuración-> Configuración de herramienta-> Compilador Cross G ++, elimine -std = gnu ++ 17 de Varios y póngalo en Dialecto-> Otros indicadores de dialecto.
fuente
Cuando uso un compilador cruzado, a menudo obtengo sistemas de compilación personalizados avanzados meticulosamente diseñados por colegas. Uso "Proyecto Makefile con código existente", por lo que la mayoría de las otras respuestas no son aplicables.
Al comienzo del proyecto, tengo que especificar que estoy usando un compilador cruzado en el asistente para "Proyecto Makefile con código existente". Lo molesto es que en los últimos 10 años más o menos, el botón del compilador cruzado en ese asistente no solicita dónde está el compilador cruzado. Entonces, en un paso que soluciona el problema de C ++ y el problema del compilador cruzado, tengo que ir a la pestaña de proveedores como se menciona en respuestas como @ravwojdyla arriba, pero el proveedor que tengo que seleccionar es el proveedor del compilador cruzado. Luego, en el cuadro de comando, pongo la ruta completa al compilador y agrego -std = gnu ++ 11 para el estándar C ++ para el que quiero tener soporte. Esto funciona tan bien como se puede esperar.
Puede hacer esto a un proyecto existente. Lo único que debe hacer es volver a ejecutar el indexador.
Nunca he tenido que agregar la bandera experimental o anular la definición de __cplusplus. Lo único es que, si tengo una cantidad sustancial de código C moderno, no tengo dónde colocar la opción estándar específica de C.
Y para cuando las cosas van realmente mal, obtener un registro del analizador, usando ese comando en el submenú Indexador, puede ser muy informativo.
fuente