2014-12-18 16 views
5

Tôi sử dụng cách dưới đây để khởi tạo một mảng cấu trúc CandyBar, nhưng trình biên dịch luôn nói các phần tử dư thừa trong bộ khởi tạo cấu trúc. Tôi đã thử đặt chỉ một khởi tạo cấu trúc trong định nghĩa mảng, nó được biên soạn, nhưng phần tử còn lại của mảng là null
Tôi nên làm gì?Tôi nên làm gì để khởi tạo một mảng của một cấu trúc

struct CandyBar{ 
    string brand; 
    float weight; 
    int calories; 
}; 

int main(int argc, const char * argv[]) { 

     array<CandyBar, 3> ary_cb = 
    { 
     {"Mocha Munch", 2.3, 350}, 
     {"Mocha Munch", 2.3, 350}, 
     {"Mocha Munch", 2.3, 350} 
    }; 
    return 0; 
} 

Trả lời

5

Bạn đang thiếu một cặp niềng răng xung quanh cấu trúc của bạn (hãy nhớ, std::array là một cấu trúc có chứa một mảng):

array<CandyBar, 3> ary_cb = 
    { 
     { 
      {"Mocha Munch", 2.3, 350} , 
      {"Mocha Munch", 2.3, 350} , 
      {"Mocha Munch", 2.3, 350} 
     } 
    }; 
+0

'nhớ, std :: mảng là một cấu trúc có chứa một array' Đây không phải là về mặt kỹ thuật đảm bảo, một trong hai cách các niềng răng có thể được elided tính C++ 14 mặc dù trình biên dịch (gcc ít nhất) vẫn chưa bắt kịp. – user657267

+1

Cảm ơn bạn đã trả lời. nhưng nếu nó là một mảng int, nó có thể được viết dưới dạng mảng a = {2, 3, 4}; không cần cặp niềng răng tôi đã bỏ lỡ? – Roybot

0

Cũng như gợi ý quantdev của này cũng làm việc (trong C++ 11):

array<CandyBar, 3> ary_cb = 
{ 
    "Mocha Munch", 2.3, 350 , 
    "Mocha Munch", 2.3, 350 , 
    "Mocha Munch", 2.3, 350 
}; 

Bạn phải bỏ lại cả hai dấu ngoặc ôm hoặc không có, khi khởi tạo tập hợp lồng nhau (ví dụ: struct/array).

1

Lý do tại sao 2 phần tử còn lại của mảng là null là vì bạn đặt tất cả thông tin trong phần tử thanh kẹo đầu tiên chứ không phải hai phần tử thanh kẹo khác.

Giải pháp:

int main(int argc, const char * argv[]) 
{ 

    array<CandyBar, 3> ary_cb = 
    { 
     { //Struct 
      {"Mocha Munch", 2.3, 350}, 
      {"Mocha Munch", 2.3, 350}, 
      {"Mocha Munch", 2.3, 350} 
     } 
    }; 
    return 0; 
} 

Nguồn ->Link

Các vấn đề liên quan