2012-03-11 8 views
5

सुझाव है हम कक्षा एक की वस्तुओं की एक सरणी है, और वर्ग एक के निर्माता दो तर्क, इस तरह की आवश्यकता होती है:मैं उन वस्तुओं की एक सरणी कैसे प्रारंभ कर सकता हूं जिनके निर्माता को दो या दो से अधिक तर्क की आवश्यकता होती है?

class A 
{ 
public: 
    A(int i, int j) {} 
}; 

int main() 
{ 
    const A a[3] = { /*How to initialize*/ }; 

    return 0; 
} 

कैसे कि सरणी प्रारंभ करने में?

उत्तर

8

कहते हैं:

const A a[3] = { A(0,0), A(1,1), A(2,2) }; 

सी ++ सरणियों के संबंध में बहुत कमी हुआ करता था (कुछ:

const A a[3] = { {0,0}, {1,1}, {2,2} }; 

पुराने compilers पर, और यह मानते हुए A एक सुलभ प्रतिलिपि निर्माता है, तो आपको क्या कहना है प्रारंभिकरण बिल्कुल संभव नहीं थे), और यह सी ++ 11 में थोड़ा बेहतर हो गया।

+0

पहले मामले में की तरह होना चाहिए करने के लिए मूल्यों को पुन: असाइन करने के लिए एक पाश का उपयोग करें, संकलक सिर्फ एक वार्मिंग जारी 32 : चेतावनी: विस्तारित प्रारंभकर्ता सूचियां केवल -std = C++ 0x या -std = gnu ++ 0x [डिफ़ॉल्ट रूप से सक्षम] के साथ उपलब्ध हैं। ' "सुलभ" का क्या अर्थ है? एक सार्वजनिक एक ?, और, धन्यवाद। –

+0

@UniMouS: जीसीसी पर, '-std = C++ 0x' के साथ संकलित करें। सुलभ अर्थ यह है कि आप इसे एक्सेस कर सकते हैं, यानी यह निजी नहीं है या '= delete'd है। –

+0

धन्यवाद, @ केरेक: और '= delete' का अर्थ क्या है? –

1

जब तक प्रकार एक प्रति constructior (चाहे संश्लेषित या स्पष्ट रूप से परिभाषित) के बाद काम करता है के रूप में:

A array[] = { A(1, 3), A(3, 4), A(5, 6) }; 

यह सी ++ 2003 और सी ++ 2011 समाधान KerrekSB द्वारा निश्चित रूप से करता है पोस्ट के साथ दोनों काम सी ++ 2003 के साथ काम नहीं करते हैं लेकिन सी ++ 2011 के साथ काम कर सकते हैं (मुझे यकीन नहीं है कि यह वहां काम करता है)।

+0

कॉपी कन्स्ट्रक्टर को भी सुलभ होने की आवश्यकता है। बस * एक * पर्याप्त नहीं है। –

0

आप एक डिफ़ॉल्ट कन्स्ट्रक्टर प्रदान कर सकते हैं और अपनी सरणी को सामान्य के रूप में प्रारंभ कर सकते हैं। 'Main.cpp:: 10: सफल प्रारंभ के बाद, प्रत्येक सदस्य

0

मुझे लगता है कि यह इस

const A a[3] = { A(1, 2), A(3, 4), A(5, 6) };

+0

नया आपको पॉइंटर्स-टू-ए बना देगा, ए-इंस्टेंस –

+0

कंपाइलर समस्या को हल करता है: main.cpp: 9: 42: त्रुटि: 'ए *' से गैर-स्केलर प्रकार 'ए' में रूपांतरण –

+0

क्षमा करें , जवाब सही हो गया है – hamed

संबंधित मुद्दे

 संबंधित मुद्दे