2013-10-02 10 views
7

में सरणी में structs में सरणी शुरू करने में समस्याएं मुझे कुछ संकलक चेतावनी को हटाने का कार्य सौंपा गया है। मैं समस्या को निम्नलिखित उदाहरण तक उबालने में सक्षम हूं, जो मैं अपने सिर को खरोंच कर रहा हूं क्यों यह काम नहीं करेगा। मुझे लगता है कि मुझे नहीं पता कि सी ++ में सामान कैसे शुरू करें। किसी भी सहायता की सराहना की जाएगी।structs

मैं बहुत की तरह जी का उपयोग ++: जी ++ init_arr.cpp

कोड यह रहा। मैं गलियारा पिज्जा में सभी टेबल पर सभी लोगों को प्रारंभ करना चाहते हैं:

// init_arr.cpp 
#include <iostream> 
#include <string> 
#include <sstream> 

using namespace std; 


struct Person { 
    int id; 
    string name; 
    double money; 
}; 


struct Table { 
    Person tab[4]; 
}; 


struct Aisle { 
    Table ais[3]; 
}; 

int main() { 
    cout << "main function()" << endl; 

    Aisle pizza = 
     { 
      { // Table 0 
       { 0, "Tom", 100.0 }, 
       { 1, "Mary", 101.0 }, 
       { 2, "Jane", 103.0 }, 
       { 3, "Joe", 104.0 } 
      }, 

      { // Table 1 
       { 0, "Tom", 100.0 }, 
       { 1, "Mary", 101.0 }, 
       { 2, "Jane", 103.0 }, 
       { 3, "Joe", 104.0 } 
      }, 

      { // Table 2 
       { 0, "Tom", 100.0 }, 
       { 1, "Mary", 101.0 }, 
       { 2, "Jane", 103.0 }, 
       { 3, "Joe", 104.0 } 
      } 
     }; 

    return 0; 
} 

मैंने सोचा था कि इसके बाद के संस्करण काम करेगा, लेकिन मैं निम्नलिखित त्रुटि मिलती है:

g++ init_arr.cpp -std=gnu++0x 
init_arr.cpp: In function ‘int main()’: 
init_arr.cpp:49: error: too many initializers for ‘Table [3]’ 
init_arr.cpp:49: error: too many initializers for ‘Aisle’ 
+8

+1: और इतने पर ...

इस प्रयास करें। –

+1

आपने अभी बहुत सारे ब्रेसिज़ गंवाए हैं। समझने में मदद के रूप में इस मामले पर विचार करें कि ऐलिस के पास ऐस की तुलना में अधिक सदस्य थे। आप इन सदस्यों को कहां रखेंगे? – Tobias

+0

उत्तर के लिए धन्यवाद। – Bitdiot

उत्तर

6

आप बहुत वंचित हो रहे हैं कोष्ठक के जोड़े के। मैंने इसे स्पष्ट करने के लिए टिप्पणियां जोड़ दी हैं जो थोड़ा सा शुरू होता है।

एक वाक्य में कहें, आपकी समस्या है कि तीन तत्वों के साथ एक सरणी {1,2,3} साथ प्रारंभ किया जा सकता है, जबकि एक struct है कि इसके एक सदस्य के रूप में एक सरणी में शामिल है एक अतिरिक्त परत है और इसलिए { {1,2,3} } साथ initalized हो गया है है - बाहरी परत struct है, आंतरिक परत सरणी है।

Aisle pizza = 
    { // Aisle init 
     { // Table ais[3] init 
     { // ais[0] init 
     { // Person tab[4] init 
      { 0, "Tom", 100.0 }, 
      { 1, "Mary", 101.0 }, 
      { 2, "Jane", 103.0 }, 
      { 3, "Joe", 104.0 } 
     } 
     }, 

     { // ais[1] init 
     { // Person tab[4] init 
      { 0, "Tom", 100.0 }, 
      { 1, "Mary", 101.0 }, 
      { 2, "Jane", 103.0 }, 
      { 3, "Joe", 104.0 } 
     } 
     }, 

     { // ais[2] init 
     { // Person tab[4] init 
      { 0, "Tom", 100.0 }, 
      { 1, "Mary", 101.0 }, 
      { 2, "Jane", 103.0 }, 
      { 3, "Joe", 104.0 } 
     } 
     } 
     } 
    }; 
+0

धन्यवाद। उत्तर के लिए। और मेरी गलतफहमी को इंगित करने के लिए धन्यवाद। मैंने आपको चेक मार्क दिया! – Bitdiot

8

जबकि @ us2012 क्या काम करता है और एक अच्छा विवरण (उसके लिए +1), मैं इसे बहुत पठनीय नहीं मिल प्रदान करता है पता चला है। यह एक विकल्प है:

Aisle pizza = 
    { 
     Table { // Table 0 
      Person { 0, "Tom", 100.0 }, 
      Person { 1, "Mary", 101.0 }, 
      Person { 2, "Jane", 103.0 }, 
      Person { 3, "Joe", 104.0 } 
     }, 

     Table { // Table 1 
      Person { 0, "Tom", 100.0 }, 
      Person { 1, "Mary", 101.0 }, 
      Person { 2, "Jane", 103.0 }, 
      Person { 3, "Joe", 104.0 } 
     }, 

     Table { // Table 2 
      Person { 0, "Tom", 100.0 }, 
      Person { 1, "Mary", 101.0 }, 
      Person { 2, "Jane", 103.0 }, 
      Person { 3, "Joe", 104.0 } 
     } 
    }; 
+1

+1, यह वास्तव में साफ है। – us2012

+0

यह एक बहुत ही स्पष्ट जवाब है। इसके लिए धन्यवाद्। – Bitdiot

+0

मैं आपको एक चेक मार्क भी देना चाहता हूं। मैंने इसे बहुत सारे ब्रेसिज़ जवाब दिए, क्योंकि उन्होंने मेरी ब्रेसिज़ को ट्रैक करने के संदर्भ में मेरी सोच गलती दिखायी। लेकिन यह निश्चित रूप से एक अच्छा जवाब है। तो फिर से धन्यवाद। – Bitdiot

2

प्रत्येक ब्लॉक को किसी ऑब्जेक्ट का प्रतिनिधित्व करने की आवश्यकता होती है। ऐलिस संरचना में एक सरणी वस्तु (एआईएस) होती है। एआईएस सरणी के प्रत्येक तत्व में एक टेबल स्ट्रक्चर होता है। प्रत्येक तालिका संरचना में एक सरणी वस्तु (टैब) होती है। एक न्यूनतम परीक्षण का मामला बनाने के लिए

Aisle pizza = 
    { // Aisle 
     { // .ais 
      { // .ais[0] 
       { // .ais[0].tab 
        { 0, "Tom", 100.0 }, // tab[0] 
        { 1, "Mary", 101.0 }, // tab[1] 
        { 2, "Jane", 103.0 }, // tab[2] 
        { 3, "Joe", 104.0 } // tab[3] 
       } 
      }, 

      { // .ais[1] 
       { // .ais[1].tab 
        { 0, "Tom", 100.0 }, // tab[0] 
        { 1, "Mary", 101.0 }, // tab[1] 
        { 2, "Jane", 103.0 }, // tab[2] 
        { 3, "Joe", 104.0 } // tab[3] 
       } 
      }, 

      { // .ais[2] 
       { // .ais[2].tab 
        { 0, "Tom", 100.0 }, // tab[0] 
        { 1, "Mary", 101.0 }, // tab[1] 
        { 2, "Jane", 103.0 }, // tab[2] 
        { 3, "Joe", 104.0 } // tab[3] 
       } 
      } 

     } 
    }; 
+0

उत्तर के लिए धन्यवाद! – Bitdiot