2011-04-23 29 views
7

Necesito crear un vector de vectores lleno de números enteros. Sin embargo, yo consigo continuamente los errores:Creando un vector de 2 dimensiones en la clase C++

de error: Se esperaba un identificador numérico antes de error constante : Se esperaba '', o '...' antes de constantes

using namespace std; 

class Grid { 
    public: 

    Grid(); 

    void display_grid(); 
    void output_grid(); 

    private: 

    vector<int> row(5, 0); 
    vector<vector<int> > puzzle(9, row); 
    int rows_; 
    int columns_; 

}; 
+2

Ayudaría si tuvieras algunos conocimientos básicos de C++. Por ejemplo, cómo inicializar datos de miembros de la clase. –

Respuesta

2

No se puede inicializar las variables miembro numéricos en el punto donde los declaras. Utilizar una lista de inicialización del constructor para que:

Grid::Grid() 
    : row(5,0), puzzle(9, row), 
    rows_(5), columns_(9) 
{ 
} 
0

No se puede inicializar un miembro en una declaración de la clase a menos que sea const static, ya que en C++ ningún código se ejecuta/se genera cuando se están declarando una clase. Tendrás que inicializarlos en tu constructor.

0

No puede inicializar miembros mutables como parte de la definición de la clase. En su lugar, do asígnelo en el constructor.

// .... 
Grid() 
{ 
    row.resize(5,0) ; 
    puzzle.resize(9,row) ; 
} 
private: 
    vector<int> row; 
    vector<vector<int> > puzzle ; 
// .. 
+0

Eso no es inicialización. –

+0

@Tomalak - Estoy confundido entre la asignación de términos y la inicialización. ¿Cuál es la terminología correcta para usar lo que OP está haciendo? No creo que sea una tarea tampoco. – Mahesh

+0

El OP está intentando hacer la inicialización. Su código no lo hace (aunque el resultado final es realmente el mismo, aquí) cuando llama funciones a los objetos completamente construidos, en lugar de pasar parámetros de constructor. –

0

Debe inicializar los miembros en el constructor de la clase, no la declaración. El siguiente no parece tener la razón de ninguna manera:

vector<int> row(5, 0); 
vector<vector<int> > puzzle(9, row); 

Si row y puzzle son funciones - los parámetros deben ser tipos. Si son variables miembro, inicialícelas en el constructor de la clase.

+0

¿Cómo funcionan? Son objetos, y están siendo construidos con argumentos (o esa era la intención). –

+0

Sé que esa era la intención, estoy señalando que la sintaxis es incorrecta. El uso de paréntesis en la definición de un miembro de la clase es para funciones. – littleadv

2

Las definiciones de las clases de C++ están limitadas, ya que no puede inicializar miembros en línea donde los declara. Es una pena, pero está siendo corregido en cierta medida en C++ 0x.

De todos modos, aún puede proporcionar parámetros de constructor con la sintaxis ctor-initializer. Puede que no hayas visto antes, pero:

struct T { 
    T() : x(42) { 
     // ... 
    } 

    int x; 
}; 

es la forma de inicializar un miembro, cuando podría haber intentado previamente (y fracasado) con int x = 42;.

Así:

class Grid { 
    public: 

    Grid(); 

    void display_grid(); 
    void output_grid(); 

    private: 

    vector<int> row; 
    vector<vector<int> > puzzle; 
    int rows_; 
    int columns_; 
}; 

Grid::Grid() 
    : row(5, 0) 
    , puzzle(9, row) 
{ 
    // ... 
}; 

Espero que ayude.

+0

+1 por mencionar C++ 0x – fredoverflow

Cuestiones relacionadas