2017-04-03 27 views
1

陣列太多初始化我有:在結構

struct X { 
    int i, j; 
}; 

struct XArray { 
    X xs[3]; 
}; 

X xs1[3] { {1, 2}, {3, 4}, {5, 6} }; 
XArray xs2 { {1, 2}, {3, 4}, {5, 6} }; 

xs1初始化罰款,初始化xs2會產生編譯錯誤:

error: too many initializers for 'XArray' 
XArray xs2 { {1, 2}, {3, 4}, {5, 6} }; 
            ^

有什麼不對?爲什麼我不能初始化?

+0

多少成員的'XArray'有哪些? – juanchopanza

+0

只有xs(數組)是成員。 – UDPLover

+1

但是,您正在初始化它,好像它有三個成員一樣。 – juanchopanza

回答

5

你需要花括號的另一個層面:

XArray xs2   { { {1, 2}, {3, 4}, {5, 6} } }; 
//     ^^^
//     | | | 
// For XArray structure | | 
//      | | 
//   For xs array | 
//      | 
//  For the X structure 
2
X xs[3] = { {1,2}, {3,4}, {5,6}}; 

然後你插上整個部分的權利到您的代碼:

XArray x2 = { { {1,2}, ... {5,6} }}; 

這是因爲XArray只有一名成員,它需要一對括號括起來:

XArray t = { /* value */ }; 

value恰好是一個數組,它也需要括號:

X xs[3] = { /* value2 */ }; 

由於該數組包含三個值,因此每個數值都必須用一對數字進行初始化。

1

你必須使用:

XArray xs2 { { {1, 2}, {3, 4}, {5, 6} } }; 

這樣的XArray第一元素與初始化:{ {1, 2}, {3, 4}, {5, 6} }

在線here

3

編譯器假定XS是一個字段,該陣列將只在您添加其他括號像解決:

XArray xs2 { {{1, 2}, {3, 4}, {5, 6}} }; 

當你要添加另一個元素,例如

struct YArray { 
    X a; 
    X xs[3]; 
} 

然後它變得清晰,和XS都需要被放入括號:

YArray y{ 
      {1,2}, // a 
      { {1, 2}, {3, 4}, {5, 6} } // xs 
     };