2014-05-09 3 views
0

Ceci est une partie de mon code de fichier d'en-tête jusqu'à présent:simple C++ d'utilisation du vecteur

class Class 
{ 
    public: 
     Class(); 
     void addSmallerClassToVector(int i1, int i2); 
     vector<SmallerClass>* listofClasses; 
}; 

void Class::addSmallerClassToVector(int i1, int i2) 
{ 
     SmallerClass* sC = new SmallerClass(i1, i2); 
     listofClasses.push_back(sC); 
} 

SmallerClass est juste une simple classe qui détient deux valeurs int. Cependant ce code génère une erreur sur la ligne listofClasses.push_back(sC);.

J'ai également essayé d'utiliser .insert(), mais il y avait le même problème. J'ai essayé d'utiliser -> au lieu de . et tel, mais l'erreur dit qu'il a à voir avec listofClasses ne pas avoir un type ou quelque chose.

Je souhaite ajouter une classe au vecteur qui existe déjà dans la classe Class. Comment puis-je faire cela?

+0

"l'erreur indique qu'il a à voir avec listofClasses n'ayant pas un type ou quelque chose." À l'avenir, il serait probablement plus judicieux de citer textuellement l'erreur plutôt que de nous donner une sorte d'estimation. –

Répondre

1

Vous neet pour définir votre vecteur pour stocker des pointeurs:

vector<SmallerClass*> listofClasses; 

Ou vous pouvez changer votre méthode à faire:

SmallerClass sC(i1, i2); 
listofClasses.push_back(sC); 

Ce que vous avez fait est déclaré comme un pointeur sur un vecteur contenant SmallerClass.

vector<SmallerClass>* listOfClasses; 

dans votre déclaration n'est même pas initialisé lorsque vous l'utilisez. Vous pouvez également effectuer les opérations suivantes dans votre constructeur alors:

listOfClasses = new vector<SmallerClass>(); 

Ensuite, vous devez utiliser l'opérateur -> pour les méthodes. Mais notez également les autres problèmes mentionnés.

+0

Merci beaucoup! C'était une solution très simple :) –

+1

Mais pourquoi des pointeurs? – juanchopanza

+2

La question portait sur un problème de syntaxe spécifique et non sur une discussion que les pointeurs sont gentils ou non. Bien que je suis d'accord avec mentionner et demander pourquoi pointeurs ce n'est pas la réponse à la question. – Stefan

1

Une façon simple de fixer est de changer pour:

vector<SmallerClass *> listofClasses; 
     ^^^^^^^^^^^^^^ 

Alternativement, vous pouvez:

vector<SmallerClass> listofClasses; 
... 
SmallerClass sC(i1, i2); 
listofClasses.push_back(sC); 
+0

Merci beaucoup! C'était une solution très simple :) –

+2

@ user2058340 Mais c'est probablement une mauvaise idée de stocker des pointeurs. Avez-vous une bonne raison de le faire? – juanchopanza

+0

@juanchopanza Ce n'est pas toujours une mauvaise idée selon la façon dont vous l'utiliseriez. – herohuyongtao

1

La solution la plus robuste serait de ne pas stocker de pointeurs dans le vecteur. Il n'y a pas non plus de raison de stocker un pointeur sur un vecteur dans Class.

#include <vector> 

class Class 
{ 
    public: 
     Class(); 
     void addSmallerClassToVector(int i1, int i2); 
     std::vector<SmallerClass> listofClasses; 
}; 

void Class::addSmallerClassToVector(int i1, int i2) 
{ 
     listofClasses.push_back(SmallerClass(i1, i2)); 
}