2011-03-06 8 views
12

मैं इस चेतावनी जब VS2008C4275 चेतावनी

चेतावनी C4275 में मेरी कोड संकलन मिलती है: गैर dll-इंटरफ़ेस वर्ग 'std :: runtime_error' dll-इंटरफ़ेस वर्ग 'MyException' के लिए आधार के रूप में इस्तेमाल किया 2> ग: \ Program Files (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 9.0 \ कुलपति \ \ stdexcept (148) शामिल हैं: 'std :: runtime_error' की घोषणा देख

मेरी कक्षा

class MyException : public std::runtime_error 
के रूप में परिभाषित किया गया है

उत्तर

15

एमएसडीएन: http://msdn.microsoft.com/en-us/library/3tdb471s.aspx

"एक निर्यातित वर्ग [जैसा कि डीएलएल में] एक वर्ग से लिया गया था जिसे [डीएलएल में निर्यात नहीं किया गया था]।"

जाहिर है आप एक डीएलएल से निर्यात करने योग्य MyException घोषित कर रहे हैं (__declspec(dllexport) का उपयोग करके), जबकि std::runtime_error निर्यात योग्य नहीं है। विचार करें कि MyException वास्तव में निर्यात करने योग्य होना चाहिए। हालांकि, यदि उपरोक्त पृष्ठ पर सूचीबद्ध कोई भी समस्या आपके विशिष्ट मामले पर लागू नहीं होती है, तो आप उस चेतावनी को नजरअंदाज कर सकते हैं - केवल मुद्दों से अवगत रहें।

+1

ऊपर लिंक किए गए पृष्ठ से: "यदि आप मानक सी ++ लाइब्रेरी में किसी प्रकार से प्राप्त कर रहे हैं तो दृश्य C++ में C4275 को अनदेखा किया जा सकता है"। आप 'std :: runtime_error' से प्राप्त कर रहे हैं, इसलिए आप चेतावनी को अनदेखा कर सकते हैं। – mbdevpl

0

मैं यहां एक ही समस्या का उत्तर ढूंढने के लिए घायल हो गया। मेरे पास std :: runtime_error से प्राप्त एक कस्टम अपवाद था और इसे मेरे डीएलएल से निर्यात कर रहा था।

अपवादों के लिए, ऐसा लगता है कि सबसे सरल समाधान व्युत्पन्न वर्ग का निर्यात नहीं करना है। यदि आप स्रोत (.CPP) फ़ाइल से हेडर (एचपीपी) में अपना कार्यान्वयन स्थानांतरित करते हैं तो आप ऐसा कर सकते हैं। मेरे लिए, यह छोटा था। मुझे कल्पना है कि ज्यादातर मामलों में अपवादों के साथ यह मामला होगा।

यह एक "अच्छी बात" है क्योंकि क्लाइंट वास्तविक रूप से std :: runtime_error के कार्यान्वयन के साथ आपके कस्टम अपवाद के कार्यान्वयन को जोड़ता है और लिंक करता है। यह वही है जो आप चाहते हैं और वास्तव में, C4275 चेतावनी आपको किस प्रकार से बचाने की कोशिश कर रही है: दो std :: runtime_exception ऑब्जेक्ट प्रकारों के बीच रनटाइम असंगतता।

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