2010-11-24 4 views
3

Je souhaite initialiser un vecteur dans une liste d'initialisation d'un constructeur. Le vecteur est constitué d'objets avec un constructeur paramétré. Ce que j'ai:Appel d'un constructeur par défaut pour l'objet dans l'initialisation du vecteur

Class::Class() : 
    raster_(std::vector< std::vector<Cell> > (60, std::vector<Cell>(80))) 
{ 
... 

Comment appeler Cell :: Cell avec deux paramètres dans la ligne ci-dessus? L'évidence:

raster_(std::vector< std::vector<Cell(true,true)> > (60, std::vector<Cell(true,true)>(80))) 

ne fonctionnait pas.

+2

Tout à fait confus. Postez les déclarations pour 'Class' et' Cell' –

Répondre

2

Vous devriez essayer:

Class::Class() : 
    raster_(60, std::vector<Cell>(80, Cell(true, true))) 
{ 
    /* ... */ 
} 

Notez que j'ai enlevé le std::vector<std::vector<Cell> > inutile de la initialiseur. Il faut aussi savoir que cela pourrait être très inefficace en fonction du coût de la copie d'un Cell:

  • Il crée un std::vector<Cell> en copiant 80 fois la valeur fournie Cell(true, true)
  • Il crée une std::vector<std::vector<Cell> > en copiant 60 fois le vecteur fourni (qui contient 80 éléments lui-même)!
+0

Oh, je ne savais pas que je pourrais ommiter le type. Vous dites que c'est très inefficace. Comment suis-je supposé initialiser le tableau alors? – problemofficer

+0

@problemofficer: Je suppose que c'est bien tant que 'Cell' est bon marché à copier – icecrime

1

:raster_(std::vector< std::vector<Cell> > (60, std::vector<Cell>(80, Cell(true, true))));

si raster_ est quelque chose qui prend le vecteur. Si raster_ lui-même est le vecteur alors comme ce

:raster(60, std::vector<Cell>(80, Cell(true, true)))

Questions connexes