त्रुटि संदेश "Lvalue आवश्यक" वास्तव में क्या मतलब है?lvalue आवश्यक
उत्तर
एक lvalue जहां बाएं हाथ की ओर 'आबंटित' नहीं है
'कि सौंपा जा सकता है कुछ' तो, एक काम के लिए देखो कुछ है कि एक काम के बाईं ओर प्रदर्शित हो सकते, दूसरे शब्दों में है उदाहरण के लिए, इस के रूप में सरल कुछ इस तरह के एक त्रुटि
if (0 = foo)
{
}
यहाँ आप क्योंकि गलती से नहीं बल्कि == से = का उपयोग कर
भी देखें
की एक निरंतर करने के लिए आवंटित करने की कोशिश मिल गया है ट्रिगर हो सकता हैइसका मतलब कार्यान्वयन एक वस्तु की उम्मीद है, लेकिन आप केवल एक मूल्य या समारोह पारित कर दिया। ऐसा असाइनमेंट के लिए होता है जिसे आपने गैर-कार्यकाल या गैर-कार्यों पर लागू संचालन के पते के लिए पारित किया है।
लाल्वु "स्थान मान" के लिए खड़ा है और इसका अर्थ है एक ऑब्जेक्ट जो किसी ऑब्जेक्ट को register
या स्मृति स्थान के रूप में घोषित करता है। 42
कुछ ऐसा मान है जो न तो मानदंड से मेल खाता है। अधिक औपचारिक रूप से तीन श्रेणियां हैं
- लालसा: वस्तुओं का जिक्र करना। इसमें घोषित घोषित वस्तुएं शामिल हैं। ऐसे गैर-संशोधित अंतराल हैं।
- फ़ंक्शन डिज़ाइनर: फ़ंक्शंस का जिक्र करना।
printf
एक फ़ंक्शन डिज़ाइनर है, लेकिन&printf
नहीं है, जबकि*&printf
फिर से है। - अन्य: कभी-कभी "रावल्यू" कहा जाता है और मानक द्वारा "अभिव्यक्ति का मूल्य" के रूप में वर्णित किया जाता है। उदाहरण
var + 0
(ऑब्जेक्ट्स से जुड़े मूल्य को उपज नहीं कर रहे हैं), या गणना के गणक हैं।&printf
इस श्रेणी से संबंधित है।
त्रुटि अगर आप function(parameter) = value;
जैसे कुछ कोड करते हैं तो त्रुटि आती है क्योंकि आप किसी भी चीज़ के लिए मूल्य असाइन नहीं कर सकते हैं जो इसके लिए संभावित कंटेनर नहीं है।
C99 मानक राज्यों (6.3.2.1):
एक lvalue
एक वस्तु प्रकार या एक अधूरी शून्य के अलावा अन्य प्रकार के साथ एक अभिव्यक्ति है; यदि lvalue
किसी ऑब्जेक्ट को मूल्यांकन करते समय निर्दिष्ट नहीं करता है, तो व्यवहार अपरिभाषित है। जब किसी ऑब्जेक्ट को एक विशेष प्रकार कहा जाता है, तो ऑब्जेक्ट को निर्दिष्ट करने के लिए उपयोग किए गए lvalue
द्वारा निर्दिष्ट किया गया है। एक संशोधित lvalue
एक lvalue
है जिसमें सरणी प्रकार नहीं है, इसमें अपूर्ण प्रकार नहीं है, इसमें कोई कॉन्स्ट-क्वालिटी प्रकार नहीं है, और यदि यह संरचना या संघ है, तो इसमें कोई सदस्य नहीं है (जिसमें, किसी भी सदस्य, या सभी निहित समेकन या संघों का तत्व) एक कॉन्स-योग्य प्रकार के साथ।
नाम lvalue
काम अभिव्यक्ति E1 = E2
, जिसमें बाईं संकार्य E1
एक (परिवर्तनीय) lvalue
होना आवश्यक है मूल रूप से आता है। यह शायद एक वस्तु "लोकेटर मूल्य" का प्रतिनिधित्व करने के रूप में बेहतर माना जाता है। कभी-कभी rvalue
कहा जाता है जिसे इस अंतर्राष्ट्रीय मानक में "अभिव्यक्ति का मूल्य" कहा जाता है।
दूसरे शब्दों में, एक lvalue
कुछ है कि आप संभावित रूप से बदलने के लिए पता लगाने कर सकते हैं। एक संशोधित lvalue
वह है जिसे आप वास्तव में बदलने के लिए की अनुमति देते हैं।
उदाहरण के लिए, सी बयान: क्योंकि x
एक lvalue
है
x = 7;
मान्य है। दूसरी ओर, बयान:
14 = 7;
मान्य नहीं 14
नहीं कुछ आप एक काम के लिए पता लगा सकते हैं, क्योंकि है।
टुकड़ा:
const int x = 7;
वास्तव में बनाता है एक lvalue
बुलाया x
भले ही आप इसे बदलने के लिए अनुमति नहीं कर रहे हैं (यह एक परिवर्तनीय `lvalue नहीं है)।
नाइट पिकिंग, लेकिन तकनीकी रूप से यह एक वैरिएबल भी हो सकता है जिसे 'रजिस्टर' के साथ घोषित किया गया है, इसलिए इसमें कोई पता नहीं हो सकता है। –
"_if एक lvalue किसी ऑब्जेक्ट को मूल्यांकन करते समय निर्दिष्ट नहीं करता है, व्यवहार अपरिभाषित होता है ._" जब व्यवहार _not_ अपरिभाषित होता है: '& * (int *) 0; '(sic) – curiousguy
सबसे अधिक संभावना है कि आप किसी ऐसे मूल्य को असाइन करने का प्रयास करते हैं जिसे असाइन नहीं किया जा सकता है। उदाहरण के लिए, निम्नलिखित में से दोनों शायद उस त्रुटि का कारण बनेंगे:
5 = 5; myObject-> myMethod() = 5;
["एल-वैल्यू आवश्यक" त्रुटि के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1353384/l-value-required-error) –
@Paul हालांकि सी ++ के बारे में है। –