Question

Quelqu'un peut-il nous aider avec ceci ...

vector<unsigned int> *vVec = new vector<unsigned int>;
        vVec .reserve(frankReservedSpace);

        start = std::clock();
        for(int f=0; f<sizeOfvec; f++)
        {   //Populate the newly created vector on the heap
            vVec .push_back(pArray[f]);
        }

Je reçois: erreur C2228: la partie gauche de '.reserve' doit avoir la classe / struct / union

Je crée un vecteur à l'aide de l'opérateur new afin qu'il survit à la fonction où il a été créé. Cela me renvoie donc un pointeur sur ce vecteur sur le tas plutôt que sur un objet vectoriel lui-même. donc cela ne me laissera pas effectuer de .reserve () de push_backs. Je ne vois pas comment contourner le problème. Quelqu'un peut-il aider?

Était-ce utile?

La solution

vVec est un pointeur sur un vecteur. Par conséquent, vous devriez utiliser l'opérateur indirection (- >) plutôt que le point (.)

vector<unsigned int> *vVec = new vector<unsigned int>;
vVec->reserve(frankReservedSpace);

start = std::clock();
for(int f=0; f<sizeOfvec; f++)
{  //Populate the newly created vector on the heap
   vVec->push_back(pArray[f]);
}

Autres conseils

Utilisez " - > " au lieu de ". " vVec est du type pointeur. Vous devez donc utiliser opérateur - > pour accéder aux membres de l'objet vers lequel il pointe.

Au lieu de vous souhaitez:

vVec.reserve(frankReservedSpace);

Personnellement, je n’aime pas la notation hongroise que vous avez intégrée dans votre nom de variable. Je préférerais voir quelque chose de plus spécifique à un domaine et auto-documenté que «vVec». Si vous décidez de passer à une liste chaînée, le nom de la variable devra-t-il changer pour refléter cela? Évidemment, la réponse est non.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top