Pb de vecteur d'objet

9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004 - 11 mai 2004 à 10:23
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 11 mai 2004 à 20:50
Salut tout le monde
J'ai longtemps cherché sur le forum des infos sur mon pb avant d'envoyer un p'tit msg mais voilà:
J'essaie de créer un vecteur d'objet Table de cette mannière:

vector<Table> vecteurTable;

Table* tbltmp=new Table(nomBase,nomTable);
vecteurTable.push_back(tbltmp);

et ma réponse est :
no matching function for call to `vector<Table,allocator<Table> >::push_back (Table *&)'
/usr/include/g++/stl_vector.h:319: candidates are: void vector<Table,allocator<Table> >::push_back(const Table &)

Je comprends bien que c'est un pb de passage par référence/pointeur mais je n'arrive à la résoudre.
Pouvez-vous m'aider SVP

13 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 mai 2004 à 11:36
tu crée un vecteur de Table et tu veux ajouter un Table*, ca ne peut pas coller!
soit tu fais tout avec des pointeurs, soit tout avec des objets normaux:
vector<Table*> vecteurTable;
Table* tbltmp=new Table(nomBase,nomTable);
vecteurTable.push_back(tbltmp);


vector<Table> vecteurTable;
Table tbltmp = Table(nomBase,nomTable);
vecteurTable.push_back(tbltmp);
0
c2millet Messages postés 198 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 février 2005
11 mai 2004 à 12:06
je comprend pas tres bien ce qu'est un vecteur vous pouvez mexpliquer. C du C++ ça non?
Cmill
0
c2millet Messages postés 198 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 février 2005
11 mai 2004 à 12:06
je comprend pas tres bien ce qu'est un vecteur vous pouvez mexpliquer. C du C++ ça non?
Cmill
0
c2millet Messages postés 198 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 février 2005
11 mai 2004 à 12:06
je comprend pas tres bien ce qu'est un vecteur vous pouvez mexpliquer. C du C++ ça non?
Cmill
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
c2millet Messages postés 198 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 février 2005
11 mai 2004 à 12:06
je comprend pas tres bien ce qu'est un vecteur vous pouvez mexpliquer. C du C++ ça non?
Cmill
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 mai 2004 à 12:24
oui en effet c'est du c++.
Un vecteur est un conteneur qui fait partie de la STL. C'est un modèle, cela signifie qu'il permet de stocker des objets du type que l'on veut (celui qui est entre <>). Le principal interet est qu'on n'est pas obligé de connaitre le nombre d'élément maximal quand on le crée, ce qui le rend plus simple d'utilisation qu'un tableau dans certains cas.
Pour en savoir plus sur les conteneurs tu peux visiter cette page:
http://casteyde.christian.free.fr/cpp/cours/online/c8379.html
0
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004
11 mai 2004 à 17:09
Et oui, la solution était évidente. Merci

Cependant, peux-tu me préciser le comportement d'un vecteur<objet*> au niveau de la copie (objet complet/adresse) car dans ma fonction en fait, c'est un peu comme ça:

void createtable(...){
Table* tbltmp=new Table(...);
vecteurTable.push_back(tbltmp);}

Donc avec tbltmp local, mais vecteurTable variable de la classe.

Est-ce que quand j'appelle la fonction une seconde fois, je ne modifie pas la table que j'ai créée et insérée dans le vector?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 mai 2004 à 17:23
non puisque tu refais un new, tu crée un autre objet, qui n'a évidemment rien a voir avec le précédent (a particulier parce qu'il n'est pas static)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
11 mai 2004 à 20:16
pourquoi pas un vector<objet> ?

et pourquoi le pointeur temp ?

vecteurTable.push_back( new Table(...) );
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 mai 2004 à 20:22
je pense que le deuxième probème n'est pas un problème majeur
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
11 mai 2004 à 20:26
faut voir le code generé

enfin ca reste quand meme moin lourd, non?
0
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004
11 mai 2004 à 20:43
Réponse à djl, en faite, la lourdeur de mon objet est telle que la petite étoile est appréciable. De plus, mon objet contient lui aussi un vecteur d'objets un peu lourd et de tailles et types différents (héritants de classes abstraites).
Donc voilà pkoi mon choix c'est porté sur l'*.

Néanmoins, si tu as une contre-proposition à me faire avec justification, je suis à ton écoute (en tant que novice C++).
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
11 mai 2004 à 20:50
si tu fait
vector<Table> vecteurTable; // il est vide, ou est le probleme ?

apres tu push_back, et d que ta plus besoin d'un element tu l'erase

ca te suffit pas ?
0
Rejoignez-nous