Récupérer le premier élément en c++ vecteur
J'ai écrit une classe wrapper pour effectuer l'insertion/suppression des opérations sur un type de vecteur.
Le code:
class GenericSymbolTable {
public:
virtual void pushBackAtom(Atom *atom) = 0;
virtual Atom* peekAtom(void) = 0;
virtual Atom* getAtom(void) = 0;
protected:
~GenericSymbolTable(void){}
};
class SymbolTable : public GenericSymbolTable {
private:
vector<Atom*> atoms;
protected:
~SymbolTable(void);
public:
void pushBackAtom(Atom *atom);
Atom* peekAtom(void);
Atom* getAtom(void);
};
Lors de l'écriture de l'implémentation de ces méthodes le compilateur renvoie contradictoires des erreurs de type:
Atom* SymbolTable::peekAtom(void) {
if(atoms.empty()) {
cout << "\t[W] Simbol table does not contain any atoms" << endl;
return NULL;
}
Atom* first = atoms.begin(); //<== type error
return first;
}
Atom* SymbolTable::getAtom(void) {
if(atoms.empty()) {
cout << "\t[W] Simbol table does not contain any atoms" << endl;
return NULL;
}
Atom* first = atoms.begin(); //<== type error
atoms.erase(atoms.begin());
return first;
}
Msg d'erreur:
impossible de convertir de ‘std::vector::iterator {aka __gnu_cxx::__normal_iterator >}’ à ‘Atom*’ dans l'initialisation de la
- Un itérateur peut être, et n'est probablement pas un type pointeur.
Vous devez vous connecter pour publier un commentaire.
Ce jeux de
first
égale à un itérateur. Tu voulais égal à l'objet de l'itérateur pointe. Essayez:ou:
Car c'est un vecteur de
Atom*
, son itérateurs point deAtom*
s.std::vector::begin
ne pas retourner le premier élément du vecteur, il retourne un itérateur (pointant vers le premier élément) qui peut être utilisée pour parcourir le vecteur.La méthode que vous cherchez est probablement
std::vector::front()
.