Kesalahan penyusun: memset tidak dideklarasikan dalam cakupan ini

101

Saya mencoba mengompilasi program C saya di Ubuntu 9.10 (gcc 4.4.1).

Saya mendapatkan kesalahan ini:

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

Tapi masalahnya saya sudah memasukkan file cpp saya:

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

Dan program yang sama dapat dikompilasi dengan baik di bawah Ubuntu 8.04 (gcc 4.2.4).

Tolong beritahu saya apa yang saya lewatkan.

michael
sumber
2
Sesuatu yang masih tidak saya mengerti adalah mengapa ini dikompilasi dengan baik pada versi gcc & ubuntu yang lebih lama dan bukan pada versi yang lebih baru. Adakah yang bisa menjelaskan mengapa?
Dennis
2
@ Dennis: mungkin karena header yang diperlukan <string.h>sedang #included secara tidak langsung melalui beberapa #includeheader d lain di konfigurasi gcc / Ubuntu Anda yang lebih lama.
Paul R
@Dennis Menambahkan -fpermissive ke opsi gcc mungkin juga membantu dalam kasus-kasus aneh tersebut, meskipun ini hanya solusi
emu

Jawaban:

172

Anda harus menyertakan <string.h>(atau yang setara dengan C ++, <cstring>).

sth
sumber
135

Setiap kali Anda mendapatkan masalah seperti ini, cukup buka halaman manual untuk fungsi tersebut dan itu akan memberi tahu Anda header apa yang Anda lewatkan, mis.

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

Perhatikan bahwa untuk C ++ biasanya lebih baik menggunakan header C ++ setara yang tepat, <cstring>/ <cstdio>/ <cstdlib>/ etc, daripada C's <string.h>/ <stdio.h>/ <stdlib.h>/ etc.

Paul R
sumber
37
Bagus! Anda mengajari kami cara memancing alih-alih memberi kami ikan, jempol!
lukmac