2012-07-06 12 views
8

Tengo un problema con eclipse C++. Mi proyecto se compila y se ejecuta pero eclipse (juno) sigue diciendo que hay miles de errores. Por ejemplo, hay una función SetRun en mi código, y eclipse menciona este error: "argumentos llamados no válidos" Los candidatos son: void SetRun (?) '", Mientras que SetRun es de tipo static void SetRun (uint32_t run);C++ eclipse error error interpretación

Tengo un montón de errores similares como ese, donde eclipse no parece entender el tipo de la función y pone un '?' en lugar.

También tengo muchos errores como este: "symbol '*' no se pudo resolver."

Creo que esto es parte del mismo problema.

¿Qué puedo hacer para que eclipse deje de contarme sobre estos errores?

+0

Problema común y molesto. Es bueno tenerlo resuelto en StOv. –

Respuesta

3

Actualmente, Eclipse es un proyecto inestable. Intenta limpiar y actualizar el proyecto.

+0

Intenté limpiar y actualizar el proyecto, pero los errores aún persisten. También reinicié eclipse. Prefiero quedarme con el eclipse, tanto como sea posible. – bob

+4

¿Ha intentado reconstruir todos los índices en el proyecto? –

+0

No lo creo, ya que no sé lo que significa :). Cómo haces eso ? – bob

4

Probé la solución propuesta y no funcionó para mí. Lo que ayudó fue desactivar CodeAnalysis para el proyecto. Fui a Propiedades-> C/C++ General-> Análisis de código. Seleccionado Use Configuración del proyecto y desactiva todos los errores. Esto es, por supuesto, muy molesto y desafortunado, y me gustaría saber cuándo está corregido. Es una pena que no podamos utilizar la función que tiene cualquier otro IDE decente.

0

Tuve muchos de estos errores al intentar que CODAN ejecutara algún código que estaba destinado a una Mac. Las bibliotecas SDK de mi Mac se incluyeron a través de enlaces simbólicos como en el this question (pero no todas - ¡permanezcan sintonizadas!) Al final, resultó que no tenía todos los encabezados incluidos. Por ejemplo, tenía la función de llamada siguiente:

IORegistryEntryGetParentEntry(service, kIOServicePlane, &parent); 

Qué estaba dando el error:

Invalid arguments 'Candidates are: ? IORegistryEntryGetParentEntry(?,?,?)' 

Ahora, la firma correcta de la función, definida en IOKit/IOKitLib.h (que tenía) es:

kern_return_t IORegistryEntryGetParentEntry(
    io_registry_entry_t  entry, 
    const io_name_t   plane, 
    io_registry_entry_t *parent); 

Ahora, si tomamos el primer argumento y localizar las definiciones de tipos, obtenemos:

typedef io_object_t   io_registry_entry_t; (in IOKit/IOTypes.h) 
typedef mach_port_t   io_object_t; (in IOKit/IOTypes.h) 
typedef mach_port_name_t mach_port_t; (in mach/port.h) 
typedef natural_t   mach_port_name_t; (in mach/port.h) 

Y luego! No tenía el include que definía __darwin_natural_t. Esto se incluye realmente en i386, que no tenía en mi directorio de enlace simbólico. Añadiendo que completó la cadena:

typedef __darwin_natural_t natural_t; (in i386/vm_types.h) 
typedef unsigned int  __darwin_natural_t; (in i386/_types.h) 

Por último, CODAN sabía qué argumento 1 tipo de IORegistryEntryGetParentEntry() se suponía que era, y el error cambiado a:

Invalid arguments 'Candidates are: kern_return_t IORegistryEntryGetParentEntry(io_registry_entry_t ,?,io_registry_entry_t*)' 

Repetí este "tipo-trace" para los otros argumentos, y encontraron que el error desapareció (ni siquiera necesité reconstruir el índice, sino YMMV). Por supuesto, necesitaría encontrar los encabezados que necesita y puede estar seguro de que ellos están incluidos; ¡lo de arriba es solo un ejemplo!

0

Tuve el mismo problema con algunas funciones también. Resultó que el argumento era, después de varios typedefs, un __int64, que no está definido (no es estándar). Solo tuve que definirlo en mi proyecto y esto resolvió el problema.

Proyecto-> Propiedades-> C/C++ General-> Caminos y símbolos-> símbolos-> C++ Fuente Archivo-> añadir

nombre: __int64

valor: mucho, mucho

(o en lugar de "long long" tal vez usted podría utilizar uno de los valores de this answer)

Editar:

Por cierto, vi un informe de fallos sobre este mismo i dici ó n en el Bugzilla Eclipse, por lo que no será necesario __int64 tal vez decisivo en el futuro

1

En Eclipse:

  • Haga clic derecho en el proyecto,
  • clic propiedades
  • Expandir "C/C++ general " el elemento en la vista de árbol de la izquierda haciendo clic en el arror, (simplemente haciendo clic en el elemento no se expanden las subopciones)
  • De las subopciones seleccione " Preprocesador Incluir rutas, macros etc. "
  • clic en la ficha "Proveedores" y marca la casilla junto a "GCC CDT incorporado compilador Ajustes [compartida]".