Erro do compilador: o memset não foi declarado neste escopo

101

Estou tentando compilar meu programa C no Ubuntu 9.10 (gcc 4.4.1).

Estou recebendo este erro:

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

Mas o problema é que já incluí no meu arquivo cpp:

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

E o mesmo programa compila bem no Ubuntu 8.04 (gcc 4.2.4).

Por favor, me diga o que estou perdendo.

Michael
fonte
2
Algo que ainda não entendo é por que ele compila bem em versões mais antigas do gcc & ubuntu e não em versões mais recentes. Alguém pode explicar por quê?
Dennis
2
@Dennis: provavelmente porque o cabeçalho necessário <string.h>está sendo #included indiretamente por meio de algum outro #includecabeçalho d em sua configuração antiga do gcc / Ubuntu.
Paul R
@Dennis Adicionar -fpermissive às opções do gcc também pode ajudar nesses casos estranhos, embora seja apenas uma solução alternativa
emu

Respostas:

172

Você deve incluir <string.h>(ou seu equivalente em C ++ <cstring>).

sth
fonte
135

Sempre que você tiver um problema como este, vá para a página do manual da função em questão e ela lhe dirá qual cabeçalho está faltando, por exemplo

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

Observe que para C ++ geralmente é preferível usar os cabeçalhos C ++ equivalentes adequados, <cstring>/ <cstdio>/ <cstdlib>/ etc, em vez de <string.h>/ <stdio.h>/ <stdlib.h>/ etc.

Paul R
fonte
37
Ótimo! Você nos ensina a pescar em vez de nos dar um peixe, polegar para cima!
lukmac,