2010-06-04 9 views
1

J'ai un vecteur qui accepte les vecteurs des vecteurs GlDouble. Mais quand j'essaie d'en pousser un, il est dit:Impossible de pousser le vecteur du vecteur de GlDouble?

Error 1 error C2664: 'std::vector<_Ty>::push_back' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'const std::vector<_Ty> &' c:\Users\Josh\Documents\Visual Studio 2008\Projects\Vectorizer Project\Vectorizer Project\Vectorizer Project.cpp 324 

Pourquoi ne me laisse-t-il pas pousser cela? Il est dit qu'il veut un Contant mais je jamais précisé que ....

Merci

the struct: 
struct SHAPECONTOUR{ 

std::vector<USERFPOINT> UserPoints; 
std::vector<std::vector<GLdouble>> DrawingPoints; 
}; 

std::vector<std::vector<GLdouble>> shape_verts; 

SHAPECONTOUR c; 
c.DrawingPoints.push_back(shape_verts); 
+0

Pouvez-vous nous donner le code que vous essayez de compiler? –

Répondre

3

Edit: Après de nouveaux ajouts, le problème ne const - le problème est que vous essayez de pousser le mauvais type.

std::vector<std::vector<GLdouble> > v; 
v.push_back(std::vector<GLdouble>()); // works; pushing contained type 
v.push_back(std::vector<std::vector<GLdouble> >()); // <-- error: trying to push type of container. 

Pensez à si vous venez d'avoir un vecteur de doubles; vous poussez un double dans le vecteur, vous ne poussez pas un autre vecteur.

+0

Je n'utilise jamais le mot-clé const n'importe où – jmasterx

+0

Etes-vous sûr de ne pas l'utiliser implicitement? Si le vecteur est membre d'une classe et que vous êtes dans une fonction de membre const, c'est implicitement const. Ou si c'est un rvalue (un temporaire) vous pouvez voir un effet similaire? – Peter

+0

En outre, le mot-clé const est généralement considéré comme utile en C++ - si d'autres programmeurs doivent interopérer avec votre code, ils peuvent trouver plus facile si vos fonctions membres sont const-correctes, par exemple. Il serait peut-être intéressant d'y regarder de plus près :) – Peter

3

Ceci n'a rien à voir avec const. Vos types sont erronés. DrawingPoints est un std::vector<std::vector<GLdouble>> ce qui signifie qu'il contient des éléments de type std::vector<GLdouble>. Vous essayez de push_back(shape_verts) qui est de type std::vector<std::vector<GLdouble>>. Je pense que ce que vous voulez est de faire shape_verts un std::vector<GLdouble>.