2012-02-29 16 views
11

मैं एक 2 डी std :: सरणी गड़बड़ प्रारंभकर्ता सूचियों को शुरू करने की कोशिश कर रहा हूं हालांकि संकलक मुझे बताता है कि बहुत सारे प्रारंभकर्ता हैं।सी ++ 11 में आप एक बहुआयामी std :: सरणी कैसे प्रारंभ करें (प्रारंभकर्ता सूचियों के माध्यम से)?

उदा .:

std::array<std::array<int, 2>, 2> shape = { {1, 1}, 
              {1, 1} }; 

संकलक त्रुटि: त्रुटि: के लिए ‘std::array<std::array<int, 2ul>, 2ul>’

लेकिन स्पष्ट रूप से भी कई initializers वहाँ भी कई नहीं कर रहे हैं। क्या मुझसे कुछ गलत हो रही है?

उत्तर

13

प्रयास करें।

std::array<std::array<int, 2>, 2> shape = {{ {1, 1}, 
              {1, 1} }}; 

या बस सभी ब्रैकेट ड्रॉप करें।

std::array<std::array<int, 2>, 2> shape = { 1, 1, 
              1, 1 }; 
+0

यह हमेशा मुझे एक अमूर्त रिसाव की तरह लगता है कि हमें ऐसा करना है। लाइब्रेरी का नतीजा भाषा के लिए "आंतरिक" नहीं है, लेकिन मुझे लगता है कि _with_, मुझे लगता है। –

+1

अगर आपने कोई चेतावनी नहीं चाहते हैं, तो बस कोशिश की, 'std :: array , 2> shape = {{{{1, 1}}, {{1, 1}}}}; eww – Jeff

6

मैं सुनिश्चित करने के लिए हम आंतरिक सी सरणी आरंभ कर रहे हैं एक और जोड़ी {} जोड़ने के लिए सुझाव है कि (बिना भी यह कोशिश कर रहा है, तो मैं गलत हो सकता है)

typedef std::array<int, 2> row; 
std::array<row,2> shape = { row {1,1}, row {1,1} }; 
+1

यह काम करता है हालांकि मैं सोच रहा हूं कि मेरा संस्करण क्यों नहीं है। दोनों अभिव्यक्ति पहली नजर में बराबर लगती हैं। –

+0

@zoopp: नहीं वे नहीं करते हैं। बेसिल एक स्पष्ट निर्माण का उपयोग करता है, जबकि आप नहीं करते हैं। –

+0

मैं स्पष्टीकरण के लिए धन्यवाद .. देखता हूं। –

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