2012-07-23 36 views

Respuesta

14

En C++ 11 solamente:

class sig 
{ 
    int p_list[4]; 
    sig() : p_list { 1, 2, 3, 4 } { } 
}; 

Pre-11 que no era posible para inicializar arrays distintos de los automáticos y estáticas en ámbito de bloque o los estáticos en alcance espacio de nombres.

+0

Tengo 10 C++. Así que tuve que hacerlo de manera difícil. Gracias por todas sus respuestas. –

+0

¿Sig(): declarando el constructor? Esta respuesta sería más útil para los principiantes si coincidiera con el diseño básico de la pregunta, para que podamos ver cómo funciona el constructor. ¿Cuál es el vacío '{}'? – GreenAsJade

+0

¿Y por qué no hay ';' después del inicializador? – GreenAsJade

-3
p_list[4] = {'A', 'B', 'C', 'D'}; 
7

Entonces, ¿cómo puedo iniciar una matriz?

Utilizando la sintaxis lista initialiser normales:

sig::sig() : p_list{1, 2, 3, 4} 
{ } 

Nota, esto sólo funciona en C++ 11. Antes de eso, necesita usar un boost::array y lo inicializa dentro de una función.

3

Si el compilador no admite C++ 11 inicialización, entonces usted tiene que asignar a cada campo separadamente:

p_list[0] = A; 
p_list[1] = B; 
p_list[2] = C; 
p_list[3] = D; 
2

Si su compilador actual todavía no soporta C++ 11, puede inicializar el contenido vector utilizando algoritmos estándar y funtores:

class sig 
{ 
public: 
    sig() 
    { 
     struct Functor 
     { 
      Functor() : value(0) {}; 
      int operator()() { return value++; }; 
      int value; 
     }; 
     std::generate(p_list, p_list + 4, Functor()); 
    } 

    int p_list[4]; 
}; 

fragmento de ejemplo anterior here.

Sí, es algo feo (al menos, me parece feo) y no hace el trabajo en tiempo de compilación; pero hace el trabajo que necesitas en el constructor.

Si necesita algún otro tipo de inicialización (inicialización con números pares/impares, inicialización con valores aleatorios, comenzar con un valor anoter, etc.) solo necesita cambiar el Functor, y esta es la única ventaja de este feo enfoque.

1

Puede inicializar los miembros de la matriz como ésta usando C++ 11 compilador utilizando -std = C++ 11 o = -std GNU ++ 11 opción

struct student { 
     private : 
       int marks[5]; 
     public : 
       char name[30]; 
       int rollno; 
       student(int arr[], const char *name, int rno):marks{arr[0], arr[1], arr[2], arr[3], arr[4]}{ 
         strcpy(this->name, name); 
         this->rollno = rno; 
       } 
       void printInfo() { 
         cout <<"Name : "<<this->name<<endl; 
         cout <<"Roll No : "<<this->rollno<<endl; 
         for(int i=0; i< 5; i++) { 
           cout <<"marks : "<<marks[i]<<endl; 
         } 
       } 
}; 
int main(int argc, char *argv[]) { 
     int arr[] = {40,50,55,60,46}; 
     //this dynamic array passing is possible in c++11 so use option -std=c++11 
     struct student s1(new int[5]{40, 50, 55, 60, 46}, "Mayur", 56); 
     //can't access the private variable 
     //cout <<"Mark1 : "<<s1.marks[0]<<endl; 
     s1.printInfo();`enter code here` 
} 
Cuestiones relacionadas