2012-06-08 27 views
50

मैं सभी cout और endl के लिए ये त्रुटि संदेश मिलता है:क्यों cout के बजाय std :: cout?

main.cc:17:5: error: ‘cout’ was not declared in this scope 
main.cc:17:5: note: suggested alternative: 
/usr/include/c++/4.6/iostream:62:18: note: ‘std::cout’ 

सुझाव पालन करने के बाद, सब कुछ ठीक है। अब मैं उत्सुक हूं, मुझे ऐसा क्यों करना पड़ा। हमने पहले कक्षाओं में सी ++ का इस्तेमाल किया था, लेकिन मुझे इनमें से किसी भी आदेश से पहले std:: लिखना नहीं था। इस प्रणाली पर क्या अलग हो सकता है?

+1

आपको कहना है कि आप यह जानने के लिए std का उपयोग कर रहे हैं कि सीट क्या है। यदि आप इसे आयात के रूप में करते हैं तो आप आसानी से कह सकते हैं, अन्यथा आपको संकलक को बताने के लिए पूरी तरह से औचित्य देना होगा कि cout actuallt – pengibot

+35

बधाई हो, आप 'std' नेमस्पेस को आयात करने की बेवकूफ आदत का 1000000 वां शिकार कर रहे हैं कि प्रत्येक एकल सी ++ के लिए प्रारंभिक पाठ्यक्रम मैंने कभी देखा है ... –

+1

क्षमा करें ल्यूक, भाषा में कोडिंग उन लोगों के छोटे समूह को सीमित नहीं है जो उस भाषा के बारे में प्रारंभिक पाठ्यक्रम सुन रहे थे। – erikbwork

उत्तर

102

ऐसा लगता है कि आपकी कक्षा प्री-स्टैंडर्ड सी ++ का उपयोग कर रही हो सकती है। एक आसान तरीका है बताने के लिए, अपने पुराने कार्यक्रमों को देखो और जांच करने के लिए, आप देख पा रहे हैं है:

#include <iostream.h> 

या

#include <iostream> 

पूर्व पूर्व मानक है, और आप कर सकेंगे बस coutstd::cout के विपरीत कुछ भी अतिरिक्त के बिना कहें। आप, वैसे भी

using std::cout; 

या

using namespace std; 

बस एक विचार जोड़कर मानक सी ++ में समान व्यवहार प्राप्त कर सकते हैं।

+1

सबसे पूर्ण और सबसे अधिक पढ़ने योग्य उत्तर! मुझे समस्या भी थी! – erikbwork

+2

कृपया 'नेमस्पेस std;' का उपयोग न करें, उदा। http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-Considered-bad-practice –

12

मानक टेम्पलेट/आईस्ट्रीम लाइब्रेरी में सब कुछ नेमस्पेस std में रहता है। आपने शायद उपयोग किया है:

using namespace std; 

आपकी कक्षाओं में, और यही कारण है कि यह काम करता है।

+13

हालांकि 'cout' एसटीएल का हिस्सा नहीं है ... –

+0

@OliCharlesworth तय: डी। – mfontanini

24

सी ++ मानक में, coutstd नाम स्थान में परिभाषित किया गया है, तो आप या तो std::cout कहते हैं या आदेश इसे प्राप्त करने के लिए

using namespace std; 
अपने कोड में

डाल करने के लिए की जरूरत है।

हालांकि, यह हमेशा मामला नहीं था, और पिछले cout में वैश्विक नामस्थान (या बाद में, वैश्विक और std दोनों में) था। इसलिए मैं निष्कर्ष निकालूंगा कि आपकी कक्षाएं पुराने सी ++ कंपाइलर का उपयोग करती हैं।

2

आपके पास कक्षा में आपके कोड में पहले using namespace std; था। यह स्पष्ट रूप से std में प्रतीकों को देखने के लिए प्रीकंपलर को बताता है, जिसका अर्थ है कि आपको std:: की आवश्यकता नहीं है। हालांकि यह के बजाय std::cout पर अच्छा अभ्यास है, इसलिए आप हर बार std::cout स्पष्ट रूप से आमंत्रित करते हैं। इस तरह यदि आप किसी अन्य लाइब्रेरी का उपयोग कर रहे हैं जो cout को फिर से परिभाषित करता है, तो आपके पास अभी भी std::cout व्यवहार कुछ अन्य कस्टम व्यवहार के बजाय है।

2

"std" एसटीएल (मानक टेम्पलेट लाइब्रेरी) के लिए उपयोग किया जाने वाला नामस्थान है। कृपया http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B

देखें या तो आप "नामस्थान नाम का उपयोग कर सकते हैं;" किसी भी एसटीएल फ़ंक्शंस, वेरिएबल्स या बस उनके सामने "std ::" डालने से पहले।

+0

पेडेंटिक, शायद: यह वास्तव में सी ++ मानक लाइब्रेरी तत्व है, न केवल एसटीएल, जो नामस्थान में हैं 'std'। संदर्भ सी ++ 03: 17.4.1.1/2: "मैक्रोज़, ऑपरेटर न्यू और ऑपरेटर डिलीट को छोड़कर सभी [सी ++ मानक] लाइब्रेरी इकाइयां नेमस्पेस std या नेमस्पेस नामस्थान स्टेड के भीतर नेस्टेड के भीतर परिभाषित की गई हैं।" –

-2

यदि मूल में काम कर रहे हैं, तो आप भी # शामिल और का उपयोग कर नाम स्थान में लिखने की जरूरत नहीं है एसटीडी; बस int filename() से शुरू करें। बस कोशिश करें।

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। एक बार आपके पास पर्याप्त [प्रतिष्ठा] (https://stackoverflow.com/help/whats-reputation) हो जाने पर आप [किसी भी पोस्ट पर टिप्पणी कर सकेंगे] (https://stackoverflow.com/help/privileges/comment); इसके बजाय, [उन उत्तरों को प्रदान करें जिन्हें पूछताछ से स्पष्टीकरण की आवश्यकता नहीं है] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-कर-बजाय)। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/17069531) –

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