2012-06-04 16 views
5

Estoy tratando de inicializar una matriz en la lista de inicialización de mi constructor, y quiero que la matriz tenga el tamaño MAX_SIZE, que es una configuración estática pública en mi clase Stack. ¿Cómo puedo hacer que funcione? El compilador se queja, diciendo que tienen tipos incompatibles en la asignación de 'doble' a 'doble [0U]'Initialize array en la lista de inicialización del constructor

Aquí está mi código:

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; 

Gracias de antemano por su ayuda.

+2

A menos que sea completamente masoquista: 'static const unsigned max_size = 4; std :: vector matriz; Stack :: Stack(): array (MAX_SIZE) {} ' –

+1

¿Hay alguna manera más simple quizás? es decir, sin usar vectores. ¿Cómo puedo hacer que el programa acepte mi miembro de datos de matriz con su tamaño MAX_SIZE? – Sean

+0

Me acostumbraría a usar 'std :: vector'. Raramente utilizo arreglos; Usaré una preferencia 'std :: vector' casi cada vez. El código que Jesse Good ha dado debería funcionar también. –

Respuesta

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) {} 

Pero, std::vector sería mejor como se menciona en los comentarios.

+0

Veo ... así que, básicamente, evite inicializar la matriz en la lista de inicialización. No es posible, ¿correcto? Además, ¿no es posible escribir mi constante MAX_SIZE después de main de la forma en que lo hice? – Sean

+1

Motivo que pido es porque leo de manera diferente aquí, que la definición debe estar fuera de la clase: http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom .ibm.xlcpp8a.doc% 2Flanguage% 2Fref% 2Fcplr038.htm – Sean

+0

'array()' en la lista del inicializador cero inicializa todos los elementos. Estás en lo correcto, y no definí 'MAX_SIZE' porque solo estoy usando su valor en el código. Defina 'MAX_SIZE' fuera de la clase si necesita usarlo en otro lugar. –

Cuestiones relacionadas