एक ही लाइन पर कई ऑब्जेक्ट पॉइंटर्स घोषित करते समय, डेवलपर्स को अक्सर एक सामान्य समस्या का सामना करना पड़ता है जिसके कारण हो सकता है संकलक त्रुटियाँ. सही कोड निष्पादन सुनिश्चित करने के लिए इस समस्या के मूल कारण को समझना महत्वपूर्ण है।
निम्नलिखित वर्ग घोषणा पर विचार करें:
public:
Entity()
{
re_sprite_eyes = new sf::Sprite();
re_sprite_hair = new sf::Sprite();
re_sprite_body = new sf::Sprite();
}
private:
sf::Sprite* re_sprite_hair;
sf::Sprite* re_sprite_body;
sf::Sprite* re_sprite_eyes;
इस मामले में, प्रत्येक पॉइंटर को अलग से घोषित करने से सही कार्यक्षमता सुनिश्चित होती है। हालाँकि, घोषणाओं को एक पंक्ति में संक्षिप्त करने का प्रयास करते समय:
private:
sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes;
संकलक एक त्रुटि उत्पन्न करता है:
error: no match for 'operator=' in '((Entity*)this)->Entity::re_sprite_eyes = (operator new(272u), (<statement>, ((sf::Sprite*)<anonymous>)))
इस त्रुटि को समझने की कुंजी तारांकन चिह्न (*) ऑपरेटर के उद्देश्य में निहित है। सी में, तारांकन या तो एक सूचक या एक डीरेफ़रेंस ऑपरेशन को इंगित कर सकता है। इस उदाहरण में, तारांकन को sf::Sprite ऑब्जेक्ट के संकेतक को इंगित करना चाहिए। हालाँकि, ऊपर दी गई घोषणा गलत तरीके से तारांकन को re_sprite_body और re_sprite_eyes पर लागू करने, पॉइंटर्स के बजाय ऑब्जेक्ट बनाने की व्याख्या करती है।
इस समस्या को हल करने के लिए, सही सिंटैक्स है:
sf::Sprite *re_sprite_hair, *re_sprite_body, *re_sprite_eyes;
इसके साथ स्पष्टीकरण, प्रत्येक सूचक को उचित रूप से घोषित किया गया है, कंपाइलर त्रुटि को हल किया गया है और इच्छित कार्यक्षमता सुनिश्चित की गई है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3