दिलचस्प पोस्ट
एचटीएमएल पृष्ठ में पाठ को jQuery के साथ बदलें क्या एंड्रॉइड ऐप की स्थापना रद्द करना संभव है? क्या बयान वैश्विक वस्तु पर गुण पैदा करते हैं? Python में deprecation चेतावनियों को अनदेखा कैसे करें जब setAttribute vs.attribute = जावास्क्रिप्ट में उपयोग करने के लिए? AppCompat के लिए पूर्ण स्क्रीन थीम स्विंग में जेटीबल के लिए पेजिंग सहायता कैसे प्रदान करें? Angular.js। एनजी-दोहराने पुनरावृत्तियों को कैसे गणना करें, जो कस्टम फ़िल्टर को संतुष्ट करते हैं अजगर वर्ग की प्रतिलिपि कैसे करें? Firebase क्लाउड मेसेजिंग का उपयोग करने के लिए उपकरण को कैसे डिवाइस भेजना है? कैसे एसडी कार्ड पर निर्देशिका स्वचालित रूप से बनाने के लिए url से htaccess निकालें index.php React.js – घटक विधियों तक पहुंच ggplot2 – घबराना और स्थिति एक साथ चकमा क्या यह संभव क्वेरी डेटा है जो निर्दिष्ट स्थिति के बराबर नहीं है?

गैर-स्थैतिक const सदस्य, डिफ़ॉल्ट असाइनमेंट ऑपरेटर का उपयोग नहीं कर सकते

मैं विस्तार कर रहा हूँ एक प्रोग्राम std::pair<> बहुत सारे का उपयोग करता है

मेरे कोड में एक बिंदु है जिस पर कंपाइलर एक बहुत बड़ा फेंकता है:

गैर-स्थैतिक const सदस्य, 'const ptr std :: pair, const double *' :: first 'डिफ़ॉल्ट असाइनमेंट ऑपरेटर का उपयोग नहीं कर सकता

मुझे वाकई यकीन नहीं है कि ये क्या कह रहा है? पीटीआर कक्षा से कौन सी विधि गायब हैं?

इस समस्या का कारण बनने वाला मूल कॉल निम्नानुसार है:

 vector_of_connections.pushback(pair(Ptr<double,double>,WeightValue*)); 

जहां यह एक वेक्टर पर std::Pair<Ptr<double,double>, WeightValue*> , जहां WeightValue* लगभग 3 फ़ंक्शंस से एक कॉन्स्ट WeightValue* है, और Ptr<double,double> एक इटरेटर से लिया जाता है एक अन्य वेक्टर पर काम करता है

भविष्य के संदर्भ के लिए, Ptr<double,double> एक Node ऑब्जेक्ट के लिए एक सूचक है।

वेब के समाधान से एकत्रित समाधान "गैर-स्थैतिक const सदस्य, डिफ़ॉल्ट असाइनमेंट ऑपरेटर का उपयोग नहीं कर सकते"

आपके पास ऐसा मामला है:

 struct sample { int const a; // const! sample(int a):a(a) { } }; 

अब, आप किसी ऐसे संदर्भ में इसका इस्तेमाल करते हैं जिसके लिए sample को असाइन करने की आवश्यकता होती है – संभवतः एक कंटेनर में (जैसे नक्शा, सदिश या कुछ और)। यह विफल हो जाएगा, क्योंकि निहित परिभाषित कॉपी असाइनमेंट ऑपरेटर इस रेखा के साथ कुछ भी करता है:

 // pseudo code, for illustration a = other.a; 

लेकिन a const है !. आपको इसे गैर-कॉन्स्ट बनाना होगा इसे चोट नहीं लगी क्योंकि जब तक आप इसे बदल नहीं सकते, तब तक यह अभी भी तार्किक रूप से होता है 🙂 आप एक उपयुक्त operator= भी शुरू करके समस्या को ठीक कर सकते हैं, जिससे कंपाइलर एक परोक्ष रूप से परिभाषित नहीं करता है। लेकिन यह बुरा है क्योंकि आप अपने कॉन्स्ट सदस्य को बदलने में सक्षम नहीं होंगे। इस प्रकार, एक ऑपरेटर = है, लेकिन अभी भी असाइन नहीं है! (क्योंकि प्रति और असाइन किए गए मान समान नहीं हैं!):

 struct sample { int const a; // const! sample(int a):a(a) { } // bad! sample & operator=(sample const&) { } }; 

हालांकि आपके मामले में, स्पष्ट समस्या जाहिरा तौर पर std::pair<A, B> । याद रखें कि std::map उस कुंजी पर सॉर्ट किया गया है जिसमें यह शामिल है। उसके कारण, आप अपनी चाबियाँ नहीं बदल सकते , क्योंकि यह आसानी से एक नक्शा की स्थिति को अवैध रूप से प्रस्तुत कर सकता है। इसके कारण, निम्नलिखित हैं:

 typedef std::map<A, B> map; map::value_type <=> std::pair<A const, B> 

यही है, यह इसमें शामिल अपनी चाबियाँ बदलने से मना कर देता है! तो अगर तुम करो

 *mymap.begin() = make_pair(anotherKey, anotherValue); 

नक्शा आपको एक त्रुटि डालता है, क्योंकि नक्शे में संग्रहीत कुछ मूल्य की जोड़ी में, ::first सदस्य का एक योग्य योग्य प्रकार है!

मुझे एक ही समस्या का सामना करना पड़ा, और इस पृष्ठ पर आया।

http://blog.copton.net/archives/2007/10/13/stdvector/index.html

पृष्ठ से:

कृपया ध्यान दें कि यह कोई भी जीएनयू विशिष्ट समस्या नहीं है। आईएसओ सी ++ मानक के लिए आवश्यक है कि टी में असाइनमेंट ऑपरेटर (देखें अनुभाग 23.2.4.3)। मैं सिर्फ जीएनयू के एसटीएल कार्यान्वयन के उदाहरण पर दिखाया था, जहां से यह हो सकता है

जहाँ तक मैं बता सकता हूं, कुछ जगह आपके पास कुछ है:

 // for ease of reading typedef std::pair<const Ptr<double, double>, const double*> MyPair; MyPair myPair = MAKEPAIR(.....); myPair.first = .....; 

चूंकि माईपेयर के सदस्य const हैं, आप उनको नहीं आवंटित कर सकते हैं।

कम से कम इस बात का उल्लेख करें कि कंपाइलर किस चीज के बारे में शिकायत कर रहा है सबसे शायद आप एक कस्टम असाइनमेंट सदस्य याद कर रहे हैं यदि आपके पास एक नहीं है, तो डिफॉल्ट एक में किक करता है। संभवतया, आपके पास उस क्लास में एक कंटिस्ट सदस्य भी होता है (जिनकी ऑब्जेक्ट्स को असाइन किया जा रहा है) और चूंकि कंसल्टेंट सदस्य को बदला नहीं जा सकता है, आप उस त्रुटि को दबा सकते हैं।

एक अन्य दृष्टिकोण: चूंकि यह एक क्लास const , इसलिए मेरा सुझाव है कि आप इसे एक static const बदल दें, अगर यह समझ में आता है।