2017-04-03 11 views
1

ich habe:zu viele Initialisierer für Array in struct

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

Die xs1 initialisiert fein, initialisiert xs2 Compiler-Fehler gibt:

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

Was ist falsch? Warum kann ich nicht initialisieren?

+0

Wie viele Mitglieder hat eine 'XArray' haben? – juanchopanza

+0

Nur xs (Array) ist das Mitglied. – UDPLover

+1

Noch initialisieren Sie es als ob es drei Mitglieder hatte. – juanchopanza

Antwort

5

Sie benötigen eine andere Ebene der geschweiften Klammern:

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

Dann stecken Sie den ganzen Teil nach rechts in Ihren Code:

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

Dies liegt daran, XArray nur ein Mitglied hat, und es braucht ein Paar Klammern umschließt es:

XArray t = { /* value */ }; 

Und value ist zufällig ein Array, das auch Klammern benötigt:

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

Da dieses Array drei Werte enthält, muss jeder von ihnen mit einem Zahlenpaar initialisiert werden.

1

Sie haben zu verwenden:

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

Auf diese Weise ist das erste Element von XArray mit initialisiert wird: { {1, 2}, {3, 4}, {5, 6} }.

Online here

3

Der Compiler geht davon aus, dass xs ein Feld ist, wird das Array nur gelöst werden, wenn Sie eine andere Klammer hinzufügen:

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

Wenn Sie ein anderes Element, z

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

dann wird deutlich, dass ein und xs beide in Klammern gesetzt werden müssen:

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