यह निम्नलिखित टेम्पलेट फ़ंक्शन के संबंध में this question में कोड के बारे में एक असंबंधित प्रश्न है।त्रुटि: प्रकार 'int &' प्रकार के संदर्भ के अमान्य प्रारंभिक प्रकार 'const int' की अभिव्यक्ति से
template <class T>
class Object : public Container {
public:
T& object;
Object(const T& obj) : object(obj) {}
};
इस कोड है कि निर्माता कहता है:
template <class T>
void Array::add_element(const T& element)
{
vec.push_back(new Object<T>(element));
}
इस कोड को ठीक संकलित, लेकिन जैसे ही मैं main
में एक पंक्ति जोड़ें के रूप में है कि यह कॉल:
Array array;
int i = 3;
array.add_element(i);
मैं एक कंपाइलर चेतावनी प्राप्त करें: error: invalid initialization of reference of type 'int&' from expression of type 'const int'
।
इसके बारे में क्या है? मैंने int
पास किया। क्या इसे स्वचालित रूप से मेरे लिए const int&
में परिवर्तित नहीं किया जाना चाहिए? संकलक शिकायत क्यों कर रहा है?
सुझाव: 'टी एंड वस्तु;' - इसके अलावा, 'स्थिरांक टी एंड obj = nullptr' किसी भी मतलब नहीं है , आप 'nullptr' के संदर्भ को प्रारंभ नहीं कर सकते हैं। – Xeo
यह एक संकेत कैसे है? यह ठीक है कि 'ऑब्जेक्ट' पहले ही घोषित किया गया है। और धन्यवाद, मैं इसे बदल दूंगा। – anthropomorphic
यह एक संकेत है क्योंकि आप एक कॉन्स्ट संदर्भ से एक गैर-कॉन्स्ट संदर्भ प्रारंभ नहीं कर सकते हैं - कॉन्स्ट-शुद्धता 101. – ildjarn