2012-07-23 43 views

Trả lời

14

Trong C++ 11 chỉ:

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

Pre-11 đó là không thể khởi tạo mảng khác hơn so với những tự động và tĩnh tại phạm vi khối hoặc những tĩnh ở phạm vi không gian tên.

+0

Tôi có C++ 10. Vì vậy, tôi đã phải làm điều đó một cách khó khăn. Cảm ơn sự phản hồi của bạn. –

+0

Là sig(): khai báo hàm khởi tạo? Câu trả lời này sẽ hữu ích hơn cho người mới bắt đầu nếu nó phù hợp với bố cục cơ bản của câu hỏi, vì vậy chúng ta có thể thấy cách hàm tạo hoạt động. '{}' Trống là gì? – GreenAsJade

+0

Và tại sao không có ';' sau bộ khởi tạo? – GreenAsJade

-3
p_list[4] = {'A', 'B', 'C', 'D'}; 
7

Vậy làm cách nào để tôi bắt đầu một mảng?

Sử dụng cú pháp danh sách initialiser bình thường:

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

Lưu ý, đây chỉ hoạt động trong C++ 11. Trước đó, bạn cần sử dụng boost::array để khởi tạo nó bên trong một hàm.

3

Nếu trình biên dịch của bạn không hỗ trợ C++ 11 khởi, sau đó bạn phải gán từng lĩnh vực separatly:

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

Nếu trình biên dịch hiện tại của bạn chưa hỗ trợ C++ 11, bạn có thể khởi tạo nội dung vectơ sử dụng thuật toán và hàm chuẩn:

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]; 
}; 

Ví dụ đoạn mã trước here.

Có, là loại xấu xí (ít nhất, có vẻ xấu xí đối với tôi) và không thực hiện công việc tại thời gian biên dịch; nhưng nó thực hiện công việc mà bạn cần trong hàm tạo.

Nếu bạn cần một loại khởi tạo khác (khởi tạo với số chẵn/lẻ, khởi tạo với giá trị ngẫu nhiên, bắt đầu với giá trị anoter, v.v.) bạn chỉ cần thay đổi Functor, và đây là lợi thế duy nhất của cách tiếp cận xấu xí này.

1

Bạn có thể khởi tạo các thành viên mảng như sử dụng C++ 11 trình biên dịch này sử dụng -std = C++ 11 hoặc -std = gnu ++ 11 tùy chọn

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` 
} 
Các vấn đề liên quan