मैं http://code.google.com/p/enhsim से कोड की निम्न पंक्ति को संकलित करना चाहते हैं:किसी ऑब्जेक्ट को संदर्भ में परिवर्तित नहीं किया जा सकता है?
enh::eout << enh::setw(26);
जीसीसी निम्न त्रुटि देता है:
error: no match for 'operator<<' in 'enh::eout << enh::setw(26)'
लेकिन EnhSimOutput
वर्ग (जिनमें से enh::eout
एक उदाहरण है) की घोषणा करता है:
EnhSimOutput& operator<< (setw& p);
यह समस्या दूर हो जाती है अगर मैं ऑपरेशन के एक संस्करण को लागू करता हूं जो टी स्वीकार करता है वह मान द्वारा आपत्ति:
enh::setw wValue(26);
enh::eout << wValue;
मेरा प्रश्न यह है:: क्यों जीसीसी के "द्वारा-संदर्भ" संस्करण का चयन नहीं करता
EnhSimOutput& operator<< (setw p);
या अगर मैं एक स्थानीय, यानी के रूप में enh::setw
वस्तु बनाने ऑपरेटर के साथ शुरू करने के लिए?
डेवलपर्स जिन्होंने इस कोड को स्पष्ट रूप से संकलित किया है, फिर भी डिफ़ॉल्ट जीसीसी इसे करने से इंकार कर देता है। किसी स्थानीय चर के रूप में अलग-अलग घोषित ऑब्जेक्ट और स्थानीय निर्मित इनलाइन के बीच कोई अंतर क्यों है?
ऑपरेटर को एक कॉन्स्ट संदर्भ में बदलना समस्या को गहराई से हल करता है। राजस्व के बारे में जानकारी के लिए धन्यवाद। मुझे नहीं पता कि कोड किसी और के लिए क्यों संकलित किया गया है। परियोजना विंडोज के लिए है ... शायद वे सभी एक * खांसी * गैर संकलन कंपाइलर का उपयोग कर रहे हैं। कोई जानकारी नहीं। –
litb: मुझे लगता है कि आपके वाक्य में "संदर्भ-से-आधार" का अर्थ है "इसके अलावा, यदि आप इसके द्वारा जाते हैं, तो पैरामीटर को गैर-कॉन्स्ट सदस्य फ़ंक्शन नहीं कहा जा सकता है, क्योंकि यह संदर्भ-से-गैर-कॉन्स्टोन है। " –
मैट: एमएस विजुअल सी ++ के पुराने संस्करण गलत तरीके से अस्थायी रूप से अस्थायी रूप से बाध्य करने के लिए बाध्य करेंगे। मुझे लगता है कि यह एमएसवीसी ++ 2005 में तय किया गया था। –