2012-07-10 12 views
7

Recientemente cambié de Eclipse 3.6 a Eclipse 3.7, que estoy usando para el desarrollo de C++ en Ubuntu 11.04.Eclipse 3.7 no puede resolver Tipos en C++ Editor

Con la versión 3.6 no tuve grandes problemas, excepto que siempre tuve algunos problemas con el indexador. Ahora con la Versión 3.7 comienza a marcar Tipos no resueltos como Errores. Como el indexador parece no gustarme aún más, mi Eclipse aparentemente no conoce tipos como uint16_t o size_t.

En contra de los errores mostrados en el editor de código, mi compilador no tiene problemas para compilar el código y resolver todos los símbolos y tipos, por lo que este parece ser un problema del propio IDE.

¿Hay alguna forma de evitar este comportamiento, porque todos los subrayados rojos hacen que mi código sea cada vez más ilegible ...?

Actualización:

acuerdo con algunas investigaciones y la respuesta de Dennis descubrí que tengo que añadir algunos caminos a Project Properties/ C/C++ General/ Paths and Symbols

Desde que estoy construyendo para un PowerPC en lugar de un objetivo I32 No puedo agregar /usr/include. En lugar de eso tenía que añadir

/usr/powerpc-linux-gnu/libc/usr/include

para todas las cabeceras estándar (como stdint.h). También necesitaba:

/usr/lib/gcc/powerpc-linux-gnu/4.5.1/include

para la stdarg.h.

Ahora casi todos los errores se han ido. La única función que todavía me preocupa es printf desde el encabezado stdio.h. Lo busqué y el archivo de cabecera se encuentra dentro de las rutas incluidas. Todavía recibo un error que dice Function printf could not be resolved. Quiero volver a señalar que estos son solo errores mostrados por Eclipse: la compilación funciona bien.

Así que esto realmente vomita 3 preguntas:

  1. En las propiedades del proyecto de la sección Paths and Symbols coherente con la incluyen rutas fuera de la sección C++ Build/Settings/C++ Includes. Esto significa que agregar/eliminar una ruta en una de esas secciones afecta directamente la entrada de las otras. Como el C++ Includes está directamente relacionado con el compilador, me pregunto por qué el compilador puede compilar correctamente (y encuentra los encabezados) incluso si no se le pasan como una ruta de acceso. ¿Hay algún tipo de ruta estándar que utilice GCC, de la que no tengo conocimiento?

  2. ¿Por qué no encontrar en printf eclipse? Se incluye el archivo de cabecera stdio.h y también contiene la declaración de printf, entonces, ¿por qué el Editor de código de Eclipse me dice que no puede resolverlo?

  3. ¿Por qué los archivos de cabecera divididos tanto? Soy consciente de que necesito otros archivos de encabezado si estoy compilando para otro traget (por ejemplo, PowerPC). Pero, ¿por qué el GNU GCC separa esos encabezados en diferentes directorios?

Respuesta

3

Los subrayados rojos para los tipos comunes generalmente son causados ​​por no tener su biblioteca estándar en su ruta include. Mire sus inclusiones para su proyecto ... están en las propiedades del proyecto. Asegúrese de que su C++ incluya una entrada que coincida con las carpetas de libs estándar de C++ para el compilador que está utilizando.

+0

Estoy usando el compilador powerpc-linux-gnu-g ++. En mi C++ Build Settings también configuré la ruta include include ('/ usr/powerpc-linux-gnu/include/C++/4.5.1'). Esta ruta también agregué rutas al Proyecto Incluir ... lamentablemente nada cambia .. – Toby

+0

'size_t' se define en' 'entre otros. Si #includes en tu archivo, mira si hace desaparecer las líneas rojas. De lo contrario, vea si el '#include ' está subrayado con una línea amarilla. Si es así, desplace el cursor sobre él y si dice que no puede encontrarlo, entonces tiene un problema con la configuración de inclusión. También intente reconstruir el índice para su proyecto. – Dennis

+0

Hola Dennis, gracias por tu entrada. Acabo de actualizar la pregunta un poco. Quizás puedas ayudarme más. – Toby

3

Después de encontrar este problema y una búsqueda que revela dos preguntas de desbordamiento de pila que afectan el mismo problema, calculé que enviaría cómo lo arreglé después de que me molestara lo suficiente como para investigar realmente.

Estoy ejecutando Fedora y molesto, tiene un archivo stddef.h en/usr/include/linux .... que en realidad está vacío. Así que, aunque tenía el stddef.h del compilador en la ruta de inclusión, el indexador realmente estaba analizando este otro archivo vacío. Entonces, ¿qué se necesita hecho era:

Prefijo sus caminos y símbolos lista con el compilador específico ruta de inclusión (en mi caso fue /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/) para evitar que se analice el otro stddef.h vacío.

+0

es importante. Tenía /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/ incluido, pero está en la parte inferior y no se puede mover hacia arriba. Tuve que agregar otra entrada y moverla a la parte superior para que funcione. Aparentemente, otros directorios en la lista tienen una versión incorrecta que estropeó las cosas. – fchen

0

Estoy usando Eclipse (Mars.1 Versión 4.5.1, Build id: 20150924-1200) con un compilador ARM (arm-none-eabi, 4.4.1). Tuve exactamente el mismo problema que tú. Mi antiguo camino era:

D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include 

Entonces descubrí otra include (postfix: 'fijo') en los directorios del compilador:

D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include-fixed 

Esto fija toda mi errores relacionados con la detección de errores de tipo (por ejemplo, uint16_t).

Cuestiones relacionadas