2010-03-24 15 views
78

मैं उबंटू 9 .10 (जीसीसी 4.4.1) में अपने सी प्रोग्राम को संकलित करने की कोशिश कर रहा हूं।कंपाइलर त्रुटि: इस स्कोप में मेमसेट घोषित नहीं किया गया था

मैं इस त्रुटि हो रही है:

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

लेकिन समस्या यह है कि मैं पहले से ही मेरे cpp फ़ाइल में शामिल है:

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

और एक ही कार्यक्रम Ubuntu 8.04 (जीसीसी 4.2 के तहत ठीक संकलित करता है। 4)।

कृपया मुझे बताएं कि मुझे क्या याद आ रही है।

+2

कुछ जो मुझे अभी भी समझ में नहीं आता है वह यह है कि यह जीसीसी और उबंटू के पुराने संस्करणों पर क्यों जुड़ा हुआ है और नए संस्करणों पर नहीं। क्या कोई समझा सकता है क्यों? – Dennis

+2

@ डेनिस: संभवतः क्योंकि आवश्यक हेडर '' आपके पुराने जीसीसी/उबंटू कॉन्फ़िगरेशन में किसी अन्य '# शामिल' हेडर के माध्यम से अप्रत्यक्ष रूप से '# शामिल 'हो रहा है। –

+0

@ डेनिस जोड़ना-जीसीसी विकल्पों में फर्ममिसिव उन अजीब मामलों में भी मदद कर सकता है, हालांकि यह सिर्फ एक कामकाज है – emu

उत्तर

137

आपको <string.h> (या इसके सी ++ समकक्ष, <cstring>) शामिल करना चाहिए।

113

Whevever आपको इस तरह की समस्या मिलती है, बस प्रश्न में man page for the function पर जाएं और यह आपको बताएगा कि आप कौन सी शीर्षलेख खो रहे हैं, उदा।

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

ध्यान दें कि सी के लिए ++ यह उचित बराबर सी ++ हेडर का उपयोग करने के लिए आम तौर पर प्राथमिकता दी जाती है, <cstring>/<cstdio>/<cstdlib>/आदि के बजाय सी <string.h>/<stdio.h>/<stdlib.h>/आदि।

+30

बढ़िया! आप हमें एक मछली देने के बजाए मछली कैसे पहनते हैं, अंगूठे को सिखाते हैं! – lukmac

+1

यदि सब कुछ मैन्युअल पढ़ने में विफल रहता है – pm100

संबंधित मुद्दे