कंपाइलर त्रुटि: इस दायरे में मेमोरियल घोषित नहीं किया गया था


101

मैं उबंटू में अपने सी कार्यक्रम को संकलित करने की कोशिश कर रहा हूँ 9.10 (gcc 4.4.1)।

मुझे यह त्रुटि मिल रही है:

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

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

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

और यही कार्यक्रम उबंटू 8.04 (जीसीसी 4.2.4) के तहत ठीक संकलित करता है।

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


2
कुछ मुझे अभी भी समझ में नहीं आ रहा है कि यह gcc & ubuntu के पुराने संस्करणों पर ठीक क्यों संकलित करता है और नए संस्करणों पर नहीं। क्या कोई समझा सकता है क्यों?
डेनिस

2
@ डेनिस: शायद इसलिए कि आवश्यक हेडर आपके पुराने जीसीसी / उबंटू कॉन्फ़िगरेशन में कुछ अन्य डी हेडर के माध्यम से अप्रत्यक्ष रूप से डी हो <string.h>रहा है। #include#include
पॉल आर

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

जवाबों:


172

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


135

आप इस तरह की समस्या को हल कर सकते हैं, जैसे कि प्रश्न में फ़ंक्शन के लिए बस मैन पेज पर जाएं और यह आपको बताएगा कि आप किस हेडर को याद कर रहे हैं, जैसे:

$ 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>/ आदि।


37
महान! आप हमें सिखाते हैं कि हमें मछली देने के बजाय मछली कैसे खिलाई जाती है!
lukmac
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.