eclipse - tutorialspoint - str functions in c
Eclipse me da argumentos inválidos ''Los candidatos son: void*memset(void*, int,?)'' Aunque sé que los argumentos son buenos (7)
Creo que es algo que ver con su configuración de Eclipse, de alguna manera.
Tomado de manera independiente, ese fragmento se compila bajo GCC (G ++) 4.7.1 en Mac OS X 10.7.5 con la línea de comando:
g++ -O3 -g -Wall -Wextra -c ms.cpp
Lo único sorprendente del tercer argumento de memset()
es que es de tipo size_t
, pero se supone que los encabezados deben declararlo, por lo que no debería ser un problema.
Si está usando malloc()
et al, incluirá <stdlib.h>
, por supuesto. También hay espacio para argumentar que deberías usar <cstdio>
, <cstring>
y <cstdlib>
, pero eso no debería impedir que el código que presentaste se compile sin error.
Recibo un error de argumentos no válido en el eclipse, aunque confío en que mis argumentos son buenos. Los argumentos sugeridos contienen un ''?'' que creo que puede indicar el problema, aunque no sé cómo solucionarlo.
He hecho todo lo posible para copiar el ejemplo que vi aquí:
http://www.cplusplus.com/reference/clibrary/cstring/memset/
Para estar seguro de que estoy obteniendo los argumentos correctos.
#include <stdio.h>
#include <string.h>
void foo()
{
char str[] = "why oh why does my IDE give me errors when I know my args are good?";
memset(str, ''-'', 4);
puts(str);
}
Eclipse me da el siguiente error en la línea memset:
Argumentos no válidos ''Los candidatos son: void * memset (void *, int,?)''
¿Qué podría estar causando esto? ¿Y qué pasa con eso? como la tercera arg?
¡Gracias por adelantado!
PD: Me he dado cuenta de que recibo errores similares cuando intento utilizar operaciones como malloc, calloc, etc.
El siguiente método resuelve el mismo problema que estaba teniendo. (en eclipse 4.2)
- Limpia tu proyecto (
Project
->Clean
) - Reindexar archivos (
Project
->C/C++ Index
->Rebuild
) - Reconstruye tu proyecto (
Project
->Build All
)
En Eclipse:
- clic derecho en el proyecto
- haga clic en propiedades
- Expanda " C / C ++ general " el elemento en la vista de árbol de la izquierda haciendo clic en la flecha, (al hacer clic en el elemento en sí no se expanden las subopciones)
- Desde las subopciones, seleccione " Preprocesador incluir rutas, macros, etc. "
- Haga clic en la pestaña " Proveedores "
- Marque la casilla junto a " Configuración del compilador incorporado de CDT GCC [Compartida] " .
Editar:
La razón por la que esto funciona es que hay un montón de aplicaciones predeterminadas y define que el compilador agrega silenciosamente detrás de la escena cuando compilas. Estas instrucciones se eclipsan para capturar estas directivas de preprocesador silenciosas, de modo que su propio indexador usa la misma configuración
He estado utilizando una biblioteca de C ++ de terceros para el desarrollo de BeagleBone y probé todas las formas posibles de incluirla (como el preprocesador incluye, la carpeta de origen, el miembro incluye, la biblioteca incluye, el compilador de C ++ incluye, el compilador de C incluye etc.). Refrescar, reindexar, limpiar y construir para cada cambio que intenté. Incluso eliminé el proyecto y copié solo los archivos .cpp y .h a un nuevo proyecto.
Finalmente encontré el problema en mi configuración y lo rectifiqué de la siguiente manera.
Haga clic con el botón derecho en el proyecto> Propiedades> Compilación C / C ++> Editor de cadenas de herramientas> Generador actual:> Seleccione Generador interno de CDT
Estoy usando g ++, para su información.
Si está trabajando con Visual Studio, size_t se define como
typedef unsigned __int64 size_t;
En versiones anteriores de Eclipse CDT, __int64 no estaba definido. Puede solucionar ese problema agregando en C / C ++ General -> Rutas y símbolos -> Símbolos
- Símbolo: __int64
- Valor: largo largo
O puedes actualizar tu versión de Eclipse CDT
Tuve un problema similar al compilar el código de alguien, y el problema era el estilo del código. Definieron algunos métodos de esta manera:
// ... Inside a class
static void
sleep( u32 ms );
Supongo que este es el estilo GNU. Simplemente cambiando la declaración a
static void sleep( u32 ms );
eliminado el problema.
Tuve un problema similar con el CDT Eclipse. Pero en mi caso, la cosa era que había puesto el using namespace std;
Declaración en varias cabeceras. Y en alguna combinación de condiciones, cuando incluí todos estos encabezados, Eclipse tuvo tal comportamiento.