2012-07-23 13 views
7

मैं निम्न कार्य करने की कोशिश कर रहा हूँ:कन्स्ट्रक्टर में कक्षा के सदस्य सरणी को कैसे प्रारंभ करें?

class sig 
{ 
public: 

int p_list[4]; 
} 

sig :: sig() 
{ 
p_list[4] = {A, B, C, D}; 
} 

मैं एक त्रुटि

निर्माता में लापता अभिव्यक्ति मिलता है।

तो मैं एक सरणी कैसे initilalize?

उत्तर

14

में सी ++ 11 केवल:

class sig 
{ 
    int p_list[4]; 
    sig() : p_list { 1, 2, 3, 4 } { } 
}; 

पूर्व 11 यह नाम स्थान दायरे में ब्लॉक गुंजाइश या स्थिर लोगों पर स्वत: और स्थिर लोगों के अलावा अन्य सरणियों प्रारंभ करने में संभव नहीं था।

+0

-std का उपयोग कर इस का उपयोग करते हुए C++ 11 संकलक जैसी सरणी सदस्यों आरंभ कर सकते हैं मैं सी ++ 10 की है। तो मुझे इसे कठिन तरीके से करना पड़ा। आपके सभी जवाबों के लिए शुक्रिया। –

+0

एसआईजी() है: कन्स्ट्रक्टर घोषित करना? यह उत्तर शुरुआती लोगों के लिए अधिक उपयोगी होगा यदि यह प्रश्न के बुनियादी लेआउट से मेल खाता है, तो हम देख सकते हैं कि कन्स्ट्रक्टर कैसे काम करता है। खाली '{}' क्या है? – GreenAsJade

+0

और शुरुआती के बाद ''' क्यों नहीं है? – GreenAsJade

7

तो मैं एक सरणी कैसे initilalize?

सामान्य initialiser सूची वाक्य रचना का उपयोग करना:

sig::sig() : p_list{1, 2, 3, 4} 
{ } 

ध्यान दें, सी ++ 11 में यह केवल काम करता है। इससे पहले, आपको boost::array को किसी फ़ंक्शन के अंदर प्रारंभ करने की आवश्यकता है।

3

अपने संकलक सी ++ 11 आरंभीकरण का समर्थन नहीं करता है, तो आप separatly प्रत्येक क्षेत्र आवंटित करने के लिए है:

p_list[0] = A; 
p_list[1] = B; 
p_list[2] = C; 
p_list[3] = D; 
2

अपने वर्तमान संकलक अभी तक सी ++ 11 का समर्थन नहीं करता है, तो आप को प्रारंभ कर सकते हैं

class sig 
{ 
public: 
    sig() 
    { 
     struct Functor 
     { 
      Functor() : value(0) {}; 
      int operator()() { return value++; }; 
      int value; 
     }; 
     std::generate(p_list, p_list + 4, Functor()); 
    } 

    int p_list[4]; 
}; 

पिछला स्निपेट उदाहरण here: मानक एल्गोरिदम और functors का उपयोग कर वेक्टर सामग्री।

हां, बदसूरत है (कम से कम, यह मेरे लिए बदसूरत लग रहा है) और संकलन समय पर काम नहीं करता है; लेकिन यह वह काम करता है जिसे आपको कन्स्ट्रक्टर में चाहिए।

यदि आपको किसी अन्य प्रकार की प्रारंभिक आवश्यकता है (यहां तक ​​कि विषम संख्याओं के साथ प्रारंभिकरण, यादृच्छिक मूल्यों के साथ प्रारंभिकरण, एनोटर मान से शुरू करें, आदि ...) आपको केवल फ़ंक्शन को बदलने की आवश्यकता है, और यह एकमात्र लाभ है यह बदसूरत दृष्टिकोण।

1

आप = C++ 11 या -std = GNU ++ 11 विकल्प

struct student { 
     private : 
       int marks[5]; 
     public : 
       char name[30]; 
       int rollno; 
       student(int arr[], const char *name, int rno):marks{arr[0], arr[1], arr[2], arr[3], arr[4]}{ 
         strcpy(this->name, name); 
         this->rollno = rno; 
       } 
       void printInfo() { 
         cout <<"Name : "<<this->name<<endl; 
         cout <<"Roll No : "<<this->rollno<<endl; 
         for(int i=0; i< 5; i++) { 
           cout <<"marks : "<<marks[i]<<endl; 
         } 
       } 
}; 
int main(int argc, char *argv[]) { 
     int arr[] = {40,50,55,60,46}; 
     //this dynamic array passing is possible in c++11 so use option -std=c++11 
     struct student s1(new int[5]{40, 50, 55, 60, 46}, "Mayur", 56); 
     //can't access the private variable 
     //cout <<"Mark1 : "<<s1.marks[0]<<endl; 
     s1.printInfo();`enter code here` 
} 
संबंधित मुद्दे