2013-05-06 10 views
5

ho:Come utilizzare initializer_list

1) NetBeans 7.3 2) Qt di Digia v4.8.4. 3) Compilatore MinGW.

Potresti aiutarmi a inizializzare il mio array? Ho fallito, sfortunatamente. Capisco che devo usare initializer_list. Ma cosa includere nei miei file e come organizzare tutto è un mistero per me.

Sarai così gentile da aiutarmi?

Figure.h

#include <initializer_list> 

class Figure: public QObject{ 
    Q_OBJECT 
     private:   
       int shape[4][4][4]; 

Figure.cpp

Figure:: Figure(){ 

std::initializer_list<int> init; 
auto init = std::initializer_list<int> 
( 
      {       
          {0, 0, 0, 0}, 
          {0, 1, 1, 0}, 
          {0, 0, 1, 0}, 
        {0, 0, 0, 0} 
        ,       
          {0, 0, 0, 0}, 
          {0, 0, 1, 0}, 
          {0, 1, 1, 0}, 
        {0, 0, 0, 0} 
        ,       
          {0, 0, 0, 0}, 
          {0, 1, 0, 0}, 
          {0, 1, 1, 0}, 
        {0, 0, 0, 0} 
        ,       
          {0, 0, 0, 0}, 
          {0, 1, 1, 0}, 
          {0, 1, 0, 0}, 
        {0, 0, 0, 0}       
      } 
    ); 

risposta

0

Non è necessario creare un initializer_list, soprattutto perché si sarebbe poi tentare di assegnare è al vostro array, piuttosto che inizializzare la matrice da esso - e che sarebbe illegale. Piuttosto, si potrebbe inizializzare l'array direttamente nella lista di inizializzazione del costruttore, come è stato fatto qui di seguito:

Figure::Figure() 
    : shape 
    { 
     { 
      {0, 0, 0, 0}, 
      {0, 1, 1, 0}, 
      {0, 0, 1, 0}, 
      {0, 0, 0, 0} 
     }, 
     { 
      {0, 0, 0, 0}, 
      {0, 0, 1, 0}, 
      {0, 1, 1, 0}, 
      {0, 0, 0, 0} 
     }, 
     { 
      {0, 0, 0, 0}, 
      {0, 1, 0, 0}, 
      {0, 1, 1, 0}, 
      {0, 0, 0, 0} 
     }, 
     { 
      {0, 0, 0, 0}, 
      {0, 1, 1, 0}, 
      {0, 1, 0, 0}, 
      {0, 0, 0, 0} 
     } 
    } 
{ 
    // Body of the constructor... 
}; 

Si noti che in C++ 11 si potrebbe anche fornire un inizializzatore in linea per l'array, come è stato fatto qui di seguito:

class Figure: public QObject { 
    Figure(); 
private: 
    int shape[4][4][4] { 
     { 
      {0, 0, 0, 0}, 
      {0, 1, 1, 0}, 
      {0, 0, 1, 0}, 
      {0, 0, 0, 0} 
     }, 
     { 
      {0, 0, 0, 0}, 
      {0, 0, 1, 0}, 
      {0, 1, 1, 0}, 
      {0, 0, 0, 0} 
     }, 
     { 
      {0, 0, 0, 0}, 
      {0, 1, 0, 0}, 
      {0, 1, 1, 0}, 
      {0, 0, 0, 0} 
     }, 
     { 
      {0, 0, 0, 0}, 
      {0, 1, 1, 0}, 
      {0, 1, 0, 0}, 
      {0, 0, 0, 0} 
     } 
    }; 
}; 

Figure::Figure() { 
    // Body of the constructor... 
} 
1
... 
    private:   
    int shape[4][4][4] {       
          {{0, 0, 0, 0}, 
          {0, 1, 1, 0}, 
          {0, 0, 1, 0}, 
          {0, 0, 0, 0}} 
        ,       
          {{0, 0, 0, 0}, 
          {0, 0, 1, 0}, 
          {0, 1, 1, 0}, 
          {0, 0, 0, 0}} 
        ,       
          {{0, 0, 0, 0}, 
          {0, 1, 0, 0}, 
          {0, 1, 1, 0}, 
          {0, 0, 0, 0}} 
        ,       
          {{0, 0, 0, 0}, 
          {0, 1, 1, 0}, 
          {0, 1, 0, 0}, 
          {0, 0, 0, 0}}       
    }; 
... 

Nel vostro caso particolare, non avrete nemmeno bisogno di usare initalizer_list esplicitamente perché array statico può essere inizializzato nel luogo di definizione, e questo viene fatto tramite la sintassi nell'esempio sopra (r equivale alla conformità C++ 11).

inizializzazione di shape nella lista di inizializzazione del costruttore è possibile anche:

... 
Figure::Figure(): shape { 
           {{0, 0, 0, 0}, 
           {0, 1, 1, 0}, 
           {0, 0, 1, 0}, 
           {0, 0, 0, 0}} 
         ,       
           {{0, 0, 0, 0}, 
           {0, 0, 1, 0}, 
           {0, 1, 1, 0}, 
           {0, 0, 0, 0}} 
         ,       
           {{0, 0, 0, 0}, 
           {0, 1, 0, 0}, 
           {0, 1, 1, 0}, 
           {0, 0, 0, 0}} 
         ,       
           {{0, 0, 0, 0}, 
           {0, 1, 1, 0}, 
           {0, 1, 0, 0}, 
           {0, 0, 0, 0}} 
    } { 
    ... 
} 
... 

NOTA: Prestare attenzione al fatto che ti sei perso parentesi supplementari nella vostra prova.

Problemi correlati