Erreur du compilateur: memset n'a pas été déclaré dans cette portée

101

J'essaye de compiler mon programme C dans Ubuntu 9.10 (gcc 4.4.1).

J'obtiens cette erreur:

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

Mais le problème est que j'ai déjà inclus dans mon fichier cpp:

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

Et le même programme se compile correctement sous Ubuntu 8.04 (gcc 4.2.4).

Veuillez me dire ce qui me manque.

Michael
la source
2
Ce que je ne comprends toujours pas, c'est pourquoi il se compile correctement sur les anciennes versions de gcc et ubuntu et non sur les versions plus récentes. Quelqu'un peut-il expliquer pourquoi?
Dennis
2
@Dennis: probablement parce que l'en-tête nécessaire <string.h>est #includeindirectement via un autre en- #includetête d dans votre ancienne configuration gcc / Ubuntu.
Paul R
@Dennis L'ajout de -fpermissive aux options gcc pourrait également aider dans ces cas étranges, bien que ce ne soit qu'une solution de contournement
emu

Réponses:

172

Vous devez inclure <string.h>(ou son équivalent C ++ <cstring>).

qc
la source
135

Chaque fois que vous rencontrez un problème comme celui-ci, accédez simplement à la page de manuel de la fonction en question et elle vous indiquera quel en-tête vous manque, par exemple

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

Notez que pour C ++, il est généralement préférable d'utiliser les en-têtes C ++ équivalents appropriés, <cstring>/ <cstdio>/ <cstdlib>/ etc, plutôt que C's <string.h>/ <stdio.h>/ <stdlib.h>/ etc.

Paul R
la source
37
Génial! Vous nous apprenez à pêcher au lieu de nous donner un poisson, pouce en l'air!
lukmac