Errore del compilatore: memset non è stato dichiarato in questo ambito


101

Sto cercando di compilare il mio programma C in Ubuntu 9.10 (gcc 4.4.1).

Ricevo 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 si compila bene con Ubuntu 8.04 (gcc 4.2.4).

Per favore dimmi cosa mi sto perdendo.


2
Qualcosa che ancora non capisco è perché si 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 <string.h>viene #included indirettamente tramite un'altra #includeintestazione d nella tua vecchia configurazione gcc / Ubuntu.
Paul R

@Dennis L'aggiunta di -fpermissive alle opzioni gcc potrebbe anche aiutare in questi casi strani, sebbene sia solo una soluzione alternativa
emu

Risposte:


172

Dovresti includere <string.h>(o il suo equivalente C ++ <cstring>).


135

Ogni volta che hai un problema come questo vai alla pagina man per la funzione 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 C ++ è generalmente preferibile utilizzare le intestazioni C ++ equivalenti appropriate, <cstring>/ <cstdio>/ <cstdlib>/ etc, piuttosto che C's <string.h>/ <stdio.h>/ <stdlib.h>/ etc.


37
Grande! Ci insegni a pescare invece di darci un pesce, pollice in su!
lukmac
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.