2010-03-24 13 views
78

Sto provando a compilare il mio programma C in Ubuntu 9.10 (gcc 4.4.1).Errore del compilatore: memset non è stato dichiarato in questo ambito

sto ottenendo questo errore:

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

ma il problema è che ho già incluso nel mio file cpp:

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

E lo stesso programma compila bene sotto Ubuntu 8.04 (gcc 4.2. 4).

Per favore dimmi cosa mi manca.

+2

Una cosa che ancora non capisco è perché compila bene su versioni precedenti di gcc e ubuntu e non su versioni più recenti. Qualcuno può spiegare perché? – Dennis

+2

@Dennis: probabilmente perché l'intestazione necessaria '' è '# include'd indirettamente tramite qualche altra intestazione' # include'd nella precedente configurazione gcc/Ubuntu. –

+0

@Dennis Aggiungendo -fpermissive alle opzioni di gcc potrebbe essere d'aiuto anche in quei casi strani, sebbene sia solo una soluzione alternativa – emu

risposta

137

È necessario includere <string.h> (o il suo equivalente C++, <cstring>).

113

Se si verifica un problema come questo, andare alla man page for the function in questione e ti dirà quale intestazione ti manca, ad es.

$ 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); 

Si noti che per il C++ è generalmente preferibile utilizzare le intestazioni il corretto equivalente C++, <cstring>/<cstdio>/<cstdlib>/etc, piuttosto che di C <string.h>/<stdio.h>/<stdlib.h>/etc.

+30

Great! Ci insegni a pescare invece di darci un pesce, pollice su ! – lukmac

+1

se tutto il resto fallisce leggere il manuale – pm100

Problemi correlati