2010-03-24 41 views
78

Estoy intentando compilar mi programa C en Ubuntu 9.10 (gcc 4.4.1).Error del compilador: memset no se declaró en este ámbito

estoy recibiendo 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 compila bien bajo Ubuntu 8.04 (gcc 4.2. 4).

Por favor dígame qué me estoy perdiendo.

+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 '' está siendo '# include'd indirectamente a través de otro encabezado' # include'd en su configuración anterior de gcc/Ubuntu. –

+0

@Dennis Agregar -permisible a las opciones de gcc también podría ayudar en esos casos extraños, aunque es solo una solución – emu

Respuesta

137

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

113

Siempre que tenga un problema como este solo vaya al man page for the function en cuestión y le dirá qué encabezado se está perdiendo, p.

$ 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++ por lo general es preferible utilizar el equivalente adecuado C++ cabeceras, <cstring>/<cstdio>/<cstdlib>/etc, en lugar de <string.h> de C/<stdio.h>/<stdlib.h>/etc.

+30

¡Genial! ¡Nos enseñas a pescar en lugar de darnos un pez, pulgar arriba ! – lukmac

+1

si todo lo demás falla, lea el manual – pm100

Cuestiones relacionadas