2017-02-05 1 views
3

Lorsque je compile le code suivant (en utilisant l'indicateur de compilation -std = C++ 11), j'obtiens le message d'erreur (seulement): "'vec' est pas une classe, un espace de noms ou une énumération ".Comment initialiser correctement un vecteur à partir de std :: vector <>

#include <vector> 
#include <iterator> 

int main(){ 

std::vector<int> vec(10,1); 
vec::iterator it; 

return 0; 
} 

Comme je ne suis pas un autre message d'erreur, pour moi, cela signifie que un objet appelé « VEC » a été initialisé, mais pas comme un vecteur, mais comme quelque chose d'autre qui n'est pas une classe et pour laquelle l'opérateur de portée ne peut donc pas être utilisé.

Pour autant que je l'ai compris, j'ai utilisé le constructeur (http://en.cppreference.com/w/cpp/container/vector/vector) suivant:

vector(size_type count, 
     const T& value, 
     const Allocator& alloc = Allocator()); 

Où il est dit que ce constructeur « Constructs le contenant des copies de comptage d'éléments ayant une valeur de valeur », donc j'attendre avoir créé un vecteur avec 10 copies de "1", mais je dois avoir mal compris quelque chose, d'où le problème.

Où est-ce que mon raisonnement s'est mal passé et d'où vient l'erreur dans le code ci-dessus?

Répondre

3

L'opérateur de champ est utilisé pour accéder à des éléments au sein d'un espace de noms ou de classe. vec n'est pas une classe mais un objet. Vous devez écrire std::vector<int>::iterator. Vous pouvez également déduire un type de variable en utilisant auto: auto it = vec.begin() est égal à std::vector<int>::iterator it = vec.begin()

7

Votre initialisation du vecteur est correcte. Mais pour faire référence au type iterator, vous devez utiliser le type de vecteur et non un objet:

std::vector<int>::iterator it;