मैं एक गतिशील सरणी को लागू करने की कोशिश कर रहा हूँ: जब इस तरह इस्तेमाल किया, यह काम करता है के रूप में उम्मीद,दो आयामी सरणी का उपयोग कर टेम्पलेट्स
template <typename Item>
class Array {
private:
Item *_array;
int _size;
public:
Array();
Array(int size);
Item& operator[](int index);
};
template <typename Item>
Array<Item>::Array() {
Array(5);
}
template <typename Item>
Array<Item>::Array(int size) {
_size = size;
_array = new Item [size];
for (int i = 0; i < size; i++)
cout << i << " " << _array[i] << " " << &_array[i] << endl;
}
template <class Item>
Item& Array<Item>::operator[](int index) {
if (index < 0 || index > _size-1)
cout << "this: " << this << ". Index out of range" << endl;
return _array[index];
}
यानी प्रिंट 5
:
Array<int> testArray(5);
testArray[0] = 5;
cout << testArray[0] << endl;
हालांकि, मैं करूंगा एक द्वि-आयामी गतिशील सरणी के लिए कक्षा का उपयोग करना पसंद है। मैंने सोचा कि निम्नलिखित जादूगर रूप से काम करेगा और 5 प्रिंट करेगा ...
Array< Array<int> > testArray(5);
testArray[0][0] = 5;
cout << testArray[0][0] << endl;
... लेकिन यह काम नहीं करता है। जब मैं मान को सेट करने की कोशिश करता हूं तो यह क्रैश होता है [0] [0]। डीबगर मुझे दिखाता है कि this
में _size
0 और _array
से NULL
पर सेट है। उस बिंदु पर this
अंतिम निर्मित ऐरे उदाहरण के _array
के पहले तत्व को इंगित करता है।
उन चीजों में से एक जो मुझे नहीं मिलता है वह तब होता है जब "आंतरिक" सरणी इसके कन्स्ट्रक्टर को कॉल करती है। कोड के माध्यम से कदम, मुझे लगता है कि Array(int size)
को एक बार और Array()
पांच बार कहा जाता है। मैं एक विशिष्ट आकार के साथ आंतरिक सरणी बनाना चाहता हूं, लेकिन Array< Array<int>(10) > testArray(5)
का उपयोग संकलित नहीं करता है।
क्या आप मुझे इस पर कुछ अंतर्दृष्टि प्रदान कर सकते हैं? ऐसा लगता है कि मैं अभी तक अपने सिर को टेम्पलेट्स के चारों ओर लपेट नहीं सकता ...
ओह, मुझे नहीं पता था कि आप चेन कंस्ट्रक्टर कॉल नहीं कर सकते! अब मैंने एक निजी फ़ंक्शन बनाया है और यह अब काम करता है, लेकिन केवल डिफ़ॉल्ट कन्स्ट्रक्टर में निर्दिष्ट आकार के साथ। गतिशील आकार के साथ आंतरिक सरणी बनाने के तरीके पर कोई विचार? – fabian789
यदि आप सी ++ 11 ** और ** का उपयोग कर रहे हैं तो बाहरी सरणी आकार स्थिर रूप से ज्ञात है, तो आप सभी आंतरिक सरणी के लिए प्रारंभकर्ता प्रदान करने के लिए प्रारंभकर्ता सूची का उपयोग कर सकते हैं। वैसे भी, मैं इसे अपने उत्तर में लिखना भूल गया, लेकिन जब तक कि यह व्यायाम के अलावा कुछ भी नहीं है, असली समाधान 'std :: vector' का उपयोग करना है। –
हां, यह सिर्फ एक अभ्यास है। क्या आप मुझे बता सकते हैं कि "प्रारंभकर्ता सूची" के साथ आपका क्या मतलब है? '_array = नई वस्तु [आकार] (आकार) का उपयोग करके; 'मेरे लिए संकलित नहीं करता है। उदाहरण के लिए – fabian789