2011-04-03 15 views
6

के लिए इस दायरे में runtime_error घोषित नहीं किया गया था, वही कोड जीसीसी 4.5.2 पर ठीक काम कर रहा है लेकिन जीसीसी 4.1.2 पर इसे संकलित करने का प्रयास करते समय, मुझे ‘runtime_error’ was not declared in this scope त्रुटि मिलती है।g ++ 4.1.2

मैं

#include <stdexcept> 

इस जीसीसी 4.1.2 के साथ एक समस्या है क्या ज़रूरत है?

कोड अंश

// Constructor 
if (resource cannot be acquired) 
    throw std::runtime_error("Blah Blah"); 
+2

क्या आपने हेडर फाइलों को खोजने के लिए कोई पथ निर्दिष्ट किया है। संकलक एक गैर मानक शीर्षलेख फ़ाइल उठा रहा हो सकता है? –

+0

मेरे सभी अतिरिक्त पथ शामिल हैं मेरे स्रोत फ़ोल्डर में हैं और stdexcept नाम की कोई फ़ाइल नहीं है। यदि आपकी परिकल्पना सही है, तो यह कैसे समझाता है कि मेरा कोड 4.5.2 में काम करता है और 4.1.2 में नहीं? –

+1

एक चीज जिसे आप कोशिश कर सकते हैं, अपने एसटीएल कार्यान्वयन से स्टेडेक्ससेप्ट को अस्थायी रूप से संपादित करना होगा ताकि यह देखने के लिए कि #warning "stdexcept शामिल" की पंक्तियों में कुछ जोड़कर इसे शामिल किया गया है या नहीं। इसकी शुरुआत में। – ds27680

उत्तर

5

विजुअल स्टूडियो का कहना है कि runtime_error को <stdexcept> में परिभाषित किया जाना चाहिए, इसलिए मुझे लगता है कि जीसीसी 4.1.2 अभी पुराना है।

+0

यह हेडर फ़ाइल समस्या की एक स्वचालित खोज है। मुझे विभिन्न लिनक्स स्वाद की कई मशीनें मिलीं। कुछ मशीनों पर मुझे दूसरों को शामिल करने की आवश्यकता नहीं है। सुरक्षा के लिए, बस शीर्षलेख शामिल करें। –

2

आप using namespace std; या using std::runtime_error; है? यदि नहीं, तो आपको runtime_error की बजाय नाम को पूरी तरह अर्हता प्राप्त करने और std::runtime_error का उपयोग करने की आवश्यकता है।

+0

हां, मेरा कोड std :: runtime_error पूरी तरह से योग्य तरीके से कॉल करता है। –

1

जीसीसी 4.1 अपेक्षाकृत पुराना है। 4.5 अधिक मानक अनुपालन है। हो सकता है कि आपने एक कंपाइलर की बग

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