नॉन-कॉन्स्ट लैवल्यू रेफरेंस को आरवैल्यू से नहीं बांध सकते: एक रिज़ॉल्यूशन
दिए गए कोड स्निपेट में क्लास फू के एक ऑब्जेक्ट को इनिशियलाइज़ करते समय एक त्रुटि आई क्लास बार के कंस्ट्रक्टर के भीतर। त्रुटि संदेश इंगित करता है कि एक गैर-कॉन्स्ट लैवल्यू संदर्भ (फू एफ) को एक प्रतिद्वंद्विता (जेनवैल्यू() को कॉल करने का परिणाम) से जोड़ा जा रहा है।
सी में, गैर-कॉन्स्ट संदर्भ पैरामीटर केवल नामित को संदर्भित कर सकते हैं चर (मान)। हालाँकि, genValue() का परिणाम एक अस्थायी मान (rvalue) है। इस समस्या को हल करने के लिए, हमें genValue() के मान को मान (int) से पास करना होगा।
class Foo {
public:
Foo(int x) {
this->x = x;
}
private:
int x;
};
class Bar {
public:
Bar(): f(genValue()) {
}
private:
Foo f;
int genValue() {
int x;
// do something ...
x = 1;
return x;
}
};
कंस्ट्रक्टर तर्क को int में बदलकर, अब हम बिना किसी त्रुटि के कंस्ट्रक्टर दायरे में Foo ऑब्जेक्ट को प्रारंभ कर सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3