Error del compilador: memset no se declaró en este ámbito

101

Estoy intentando compilar mi programa C en Ubuntu 9.10 (gcc 4.4.1).

Recibo este error:

Rect.cpp:344: error: memset was not declared in this scope

Pero el problema es que ya he incluido en mi archivo cpp:

#include <stdio.h>
#include <stdlib.h>

Y el mismo programa se compila bien en Ubuntu 8.04 (gcc 4.2.4).

Por favor, dime qué me estoy perdiendo.

Miguel
fuente
2
Algo que todavía no entiendo es por qué se compila bien en versiones anteriores de gcc y ubuntu y no en versiones más nuevas. ¿Alguien puede explicar por qué?
Dennis
2
@Dennis: probablemente porque el encabezado necesario <string.h>se está #included indirectamente a través de algún otro #includeencabezado d en su configuración anterior de gcc / Ubuntu.
Paul R
@Dennis Agregar -fpermissive a las opciones de gcc también podría ayudar en esos casos extraños, aunque es solo una solución alternativa
emu

Respuestas:

172

Debe incluir <string.h>(o su equivalente en C ++ <cstring>).

algo
fuente
135

Siempre que tenga un problema como este, vaya a la página del manual de la función en cuestión y le dirá qué encabezado le falta, por ejemplo

$ man memset

MEMSET(3)                BSD Library Functions Manual                MEMSET(3)

NAME
     memset -- fill a byte string with a byte value

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <string.h>

     void *
     memset(void *b, int c, size_t len);

Tenga en cuenta que para C ++ es generalmente preferible usar los encabezados C ++ equivalentes adecuados, <cstring>/ <cstdio>/ <cstdlib>/ etc, en lugar de C <string.h>/ <stdio.h>/ <stdlib.h>/ etc.

Paul R
fuente
37
¡Excelente! ¡Nos enseñas a pescar en lugar de darnos un pez, pulgar arriba!
lukmac