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.


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>).


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.


37
Génial! Vous nous apprenez à pêcher au lieu de nous donner un poisson, pouce en l'air!
lukmac
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.