ข้อผิดพลาดของคอมไพเลอร์: memset ไม่ได้รับการประกาศในขอบเขตนี้


101

ฉันพยายามรวบรวมโปรแกรม C ของฉันใน Ubuntu 9.10 (gcc 4.4.1)

ฉันได้รับข้อผิดพลาดนี้:

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

แต่ปัญหาคือฉันได้รวมไว้ในไฟล์ cpp แล้ว:

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

และโปรแกรมเดียวกันรวบรวมได้ดีภายใต้ Ubuntu 8.04 (gcc 4.2.4)

ช่วยบอกฉันทีว่าฉันขาดอะไรไป


2
สิ่งที่ฉันยังไม่เข้าใจคือเหตุใดจึงรวบรวมได้ดีกับ gcc & ubuntu เวอร์ชันเก่าและไม่ใช่เวอร์ชันที่ใหม่กว่า ใครช่วยอธิบายว่าทำไม?
Dennis

2
@ เดนนิส: อาจเป็นเพราะส่วนหัวที่จำเป็น<string.h>กำลังถูก#included ทางอ้อมผ่านส่วน#includeหัว d อื่น ๆในการกำหนดค่า gcc / Ubuntu รุ่นเก่าของคุณ
Paul R

@ เดนนิสการเพิ่ม - การยอมรับตัวเลือก gcc อาจช่วยได้ในกรณีแปลก ๆ เหล่านั้นแม้ว่าจะเป็นเพียงวิธีแก้ปัญหาก็ตาม
emu

คำตอบ:



135

เมื่อใดก็ตามที่คุณได้รับปัญหาเช่นนี้เพียงไปที่man page สำหรับฟังก์ชั่นที่เป็นปัญหาและมันจะบอกคุณว่าคุณขาดส่วนหัวใดเช่น

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

โปรดทราบว่าสำหรับ C ++ โดยทั่วไปแล้วควรใช้ส่วนหัว C ++ ที่เทียบเท่าที่เหมาะสม<cstring>/ <cstdio>/ <cstdlib>/ etc มากกว่า C's <string.h>/ <stdio.h>/ <stdlib.h>/ etc


37
เยี่ยมมาก! คุณสอนวิธีตกปลาแทนการให้ปลาเรายกนิ้วให้!
lukmac
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.