2012-04-08 6 views
19

के आखिरी संस्करण में ऑटो कीवर्ड का उपयोग क्यों नहीं कर सकता हूं, हाल ही में मैंने सी ++ 11 द्वारा समर्थित नई सुविधाओं का उपयोग करने की कोशिश की, और मैंने ऐसा बयान लिखा हालांकि संकलक विफल रहा।मैं जीसीसी

auto x = 1; 

रिपोर्ट त्रुटि नीचे सूचीबद्ध:

D:\DEV\CBCppTest\main.cpp||In function 'int main()':| 
D:\DEV\CBCppTest\main.cpp|22|warning: 'auto' changes meaning in C++11; please remove it [-Wc++0x-compat]| 
D:\DEV\CBCppTest\main.cpp|22|error: 'x' does not name a type| 
||=== Build finished: 1 errors, 1 warnings ===| 

क्यों MinGW पर पिछले जीसीसी संस्करण 4.7.0 इस बयान का समर्थन नहीं कर सकते हैं। लेकिन बनाम 10 का संकलक पारित किया। क्या किसी को इस मुद्दे का कारण पता चलेगा?

उत्तर

29

"जीसीसी 2011 आईएसओ सी ++ मानक के लिए प्रयोगात्मक समर्थन प्रदान करता है। यह समर्थन -std = C++ 11 या -std = gnu ++ 11 कंपाइलर विकल्पों के साथ सक्षम किया जा सकता है; पूर्व जीएनयू एक्सटेंशन को अक्षम करता है।"

यह यहाँ से आता है: c+11 support

+0

धन्यवाद, यह मेरे लिए एक लंबे समय के लिए हैरान। –

5

जब संकलन, आप -std=c++11 को जी ++ कमांड लाइन जोड़ने की जरूरत है।

2

यह उस सुविधा के कारण है जिसे डिफ़ॉल्ट रूप से जीसीसी कंपाइलर द्वारा सक्षम नहीं किया जा रहा है। आप codeblocks पर हैं, तो सेटिंग्स पर जाएँ -> संकलक और सुविधा को सक्षम दिखाया गया है - http://imgur.com/KrHx8nh

7

व्याख्या करने के लिए क्या संकलक वास्तव में के बारे में शिकायत की है: auto एक पुरानी सी कीवर्ड हुआ करता था, की घोषणा इस चर है कि स्वचालित संग्रहण। इन खोजशब्दों को टाइप सिस्टम के साथ बहुत कम करना है, वे निर्दिष्ट करते हैं कि मेमोरी में वेरिएबल का प्रतिनिधित्व कैसे किया जाता है: जहां वे संग्रहीत होते हैं (प्रोसेसर रजिस्टर बनाम मुख्य मेमोरी/स्टैक) और मेमोरी को पुनः दावा कैसे किया जाता है। auto का मतलब है कि चर स्टैक पर संग्रहीत किया जाता है (हालांकि प्रोसेसर इसे प्रोसेसर रजिस्टर में अनुकूलित कर सकता है) और मेमोरी स्वचालित रूप से पुनः प्राप्त की जाती है जब परिवर्तक गुंजाइश से बाहर हो जाता है - जो लगभग किसी भी स्थिति में सही विकल्प है और इस प्रकार डिफ़ॉल्ट, इसलिए लगभग किसी ने कभी भी इस पुराने auto कीवर्ड का उपयोग नहीं किया। फिर भी C++03 अभी भी कोड के लिए पिछड़ा संगतता प्रदान करता है; आज के कंपाइलर अभी भी विरासत कोड का समर्थन करना चाहते हैं।


हालांकि अक्सर आप वस्तुओं, आप अभी भी ढेर पर चर के माध्यम से उन तक पहुँचने हो जाएगा ढेर पर निवास करना चाहते हैं; सी ++ में हीप-आवंटित स्मृति (new, std::vector इत्यादि) का उपयोग करने के अपने तरीके हैं, आपको असुरक्षित सी-शैली malloc सामान की आवश्यकता नहीं है।

1

के लिए मुझे "-std = C++ 0x" "करने के लिए जी ++ कमांड लाइन जोड़ने समस्या का समाधान हो।