आमतौर पर एक निरंतर सदस्य चर को परिभाषित करने से आप अपने वर्ग है, जो केवल एक गेटर लेकिन कोई सेटर है में एक निरंतर निजी सदस्य चर है जब, यह कुछ इस तरह दिखेगा:सी ++ वर्ग निर्माता अंदर
// Example.h
class Example {
public:
Example(const int value);
const int getValue() const;
private:
const int m_value;
};
// Example.cpp
#include "Example.h"
Example::Example(const int value)
: m_value(value)
{
}
const int Example::getValue() const
{
return m_value;
}
अब क्या मैं ऐसा करने की कोशिश कर रहा हूं, उसके पास निरंतर int सदस्य चर है, लेकिन प्रारंभिक खंड में इसे परिभाषित करने की बजाय: : m_value(value)
मुझे एक अन्य वस्तु लेने की आवश्यकता है - मैं इस उदाहरण में एक वेक्टर का उपयोग करूंगा - जैसा कि कन्स्ट्रक्टर का पैरामीटर, और पैरामीटर ऑब्जेक्ट के आधार पर m_value सेट करें।
Example::Example(std::vector<Example*> myVec)
{
if (myVec.size()) {
m_value = myVec.size() + 1;
}
else {
m_value = -1;
}
}
लेकिन मैं एक त्रुटि uninitialized member 'Example::m_value' with 'const' type 'const int'
हो और अगर मैं m_value प्रारंभ करने के अंदर init: इस मामले में, मैं वेक्टर के आकार +1 करने के लिए, अगर आकार 0. से ऊपर है तो यह मैं क्या किया है की कोशिश करेंगे खंड, मुझे त्रुटि assignment of read-only data-member 'Example::m_value'
मिलती है जो सभी मुझे समझ में आता है, मुझे उन त्रुटियों को प्राप्त करना है, लेकिन मैं उनके आसपास कैसे जा सकता हूं?
संपादित करें: केवल m_value
संपादित करने का एकमात्र तरीका ऑब्जेक्ट के अंदर है (क्योंकि m_value निजी है)। केवल गेटर होने से मुझे m_value को कन्स्ट्रक्टर में सेट किए गए किसी भी चीज़ से अलग करने से सीमित कर दिया जाएगा। क्या मुझे सदस्य चर के रूप में निरंतर int होने से कुछ भी लाभ होता है?
': m_value (! MyVec.empty()? MyVec.size() + 1: -1)'? – hmjd
इसे 'const' क्यों होना चाहिए? – Nim
आपके अपडेट के संबंध में - नहीं, कोई लाभ नहीं जो मैं देख सकता हूं ... – Nim