2012-06-04 5 views
5

Sto tentando di inizializzare un array nell'elenco di inizializzazione del mio costruttore, e voglio che l'array abbia la dimensione MAX_SIZE, che è un const statico pubblico nella mia classe Stack. Come posso farlo funzionare? Il compilatore si lamenta, dicendo che hanno i tipi incompatibili nella assegnazione di 'doppio' a 'doppia [0u]'Inizializza array nell'elenco di inizializzazione del costruttore

Ecco il mio codice:

class Stack { 
    public:  
      Stack(); 
      static const unsigned MAX_SIZE; 
    private: 
      double array[]; 
      unsigned elements;  
    }; // class Stack 

    Stack::Stack(): array(array[MAX_SIZE]), elements(0) {} 

    const unsigned Stack::MAX_SIZE = 4; 

Grazie in anticipo per il vostro aiuto.

+2

A meno che tu non sia completamente masochista: 'static const unsigned max_size = 4; std :: vector array; Stack :: Stack(): array (MAX_SIZE) {} ' –

+1

C'è forse un modo più semplice? cioè senza usare vettori. Come posso ottenere che il programma accetti il ​​mio membro dei dati dell'array con le dimensioni massime MAX_SIZE? – Sean

+0

Mi sarei abituato a usare 'std :: vector'. Uso raramente gli array; Userò un 'std :: vector' come preferenza quasi ogni volta. Il codice @Jesse Good ha dato dovrebbe funzionare pure. –

risposta

5
class Stack { 
     public: 
       Stack(); 
       static const unsigned MAX_SIZE = 4; 
     private: 
       double array[MAX_SIZE]; 
       unsigned elements; 
     }; // class Stack 

Stack::Stack(): array(), elements(0) {} 

Ma, std::vector sarebbe meglio come accennato nei commenti.

+0

Vedo .. quindi, in pratica, evitare di inizializzare la matrice nella lista di inizializzazione. Non è possibile, corretto? Inoltre, non è possibile scrivere la mia costante MAX_SIZE dopo la modalità principale? – Sean

+1

Motivo che chiedo è perché ho letto diversamente qui, che la definizione dovrebbe essere al di fuori della classe: http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom .ibm.xlcpp8a.doc% 2Flanguage% 2Fref% 2Fcplr038.htm – Sean

+0

'array()' nella lista intializer zero inizializza tutti gli elementi. Hai ragione, e non ho definito "MAX_SIZE" perché sto solo usando il suo valore nel codice. Definisci "MAX_SIZE" al di fuori della classe se devi usarlo altrove. –