2016-08-04 14 views
26

कार्यक्रम को देखते हुए के लिए आगे संदर्भ मनाही:आईएसओ सी ++ 'enum' प्रकार

enum E : int 
{ 
    A, B, C 
}; 

g++ -c test.cpp काम करता है ठीक।

test.cpp:1:6: error: ISO C++ forbids forward references to 'enum' types 
enum E : int 
    ^
test.cpp:1:8: error: expected unqualified-id 
enum E : int 
    ^
2 errors generated. 

ये त्रुटि संदेश मेरे लिए कोई मतलब नहीं है: हालांकि, clang++ -c test.cpp निम्न त्रुटियों देता है। मुझे यहां कोई आगे संदर्भ नहीं दिख रहा है।

+0

एफडब्ल्यूआईडब्ल्यू, जीसीसी अब (5 या 6 के रूप में) '-std = C++ 14' के साथ संकलित करता है डिफ़ॉल्ट, जबकि क्लैंग अभी भी '-std = C++ 98' AFAIK का उपयोग करता है। – chris

+2

मुझे लगता है कि अगर आप कंपाइलर संस्करण और विकल्प शामिल करते हैं तो इससे मदद मिलेगी। – juanchopanza

+0

कंपाइलर संस्करण (साथ ही लोगों के लिए पूर्ण खोल प्रतिलिपि यह बताती है कि मेरा वास्तविक स्रोत कोड प्रश्न में किसी के अनुरूप नहीं है): https://dump.thecybershadow.net/6bf06811a8f77fce574017622d1dd8e7/21%3A51%3A18-upload.txt –

उत्तर

22

एनम के लिए अंतर्निहित प्रकार निर्दिष्ट करना एक सी ++ 11 भाषा सुविधा है। कोड संकलित करने के लिए, आपको -std=c++11 स्विच जोड़ना होगा। यह जीसीसी और क्लैंग दोनों के लिए काम करता है।

सी ++ 03 में enums के लिए, अंतर्निहित अभिन्न प्रकार कार्यान्वयन-परिभाषित है, जब तक कि गणनाकर्ता के मान int या unsigned int में फिट नहीं हो सकते हैं। (हालांकि, माइक्रोसॉफ्ट के कंपाइलर ने वीएस   2005 के बाद से एक स्वामित्व विस्तार के रूप में अंतर्निहित प्रकार को लागू करने की अनुमति दी है।)

+2

आप सही हैं: यदि आप विकल्प -std = C++ 11 के साथ संकलित करते हैं तो काम करता है ([ऑनलाइन डेमो] (https://gcc.godbolt.org/#compilers :! ((कंपाइलर: clang380, विकल्प: '- एसटीडी% 3DC% 2 बी% 2B11 ', स्रोत:' enum + ई +: + पूर्णांक% 0A% 7B% 0A ++++ ए, + बी, सी +% 0A% 7 दिन% 3 बी ')), filterAsm: (commentOnly: ! टी, निर्देशों: टी, लेबल: टी), संस्करण: 3))। 6 से अधिक उम्र के जीसीसी के साथ आपको एक स्पष्ट चेतावनी दी जाती है। जीडी 6 के साथ std ध्वज के लिए कोई नींद नहीं है। – Christophe

+2

@ क्रिस्टोफ़े: जो कहना है: जीसीसी 6 के साथ, उन्होंने (आखिरकार) इसे डिफ़ॉल्ट रूप से सी ++ 11 संकलित करने के लिए बदल दिया, और पुराने मानकों के अनुरूप स्विच की आवश्यकता होती है। –