Pb de vecteur d'objet

Signaler
Messages postés
28
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
14 septembre 2004
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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);
Messages postés
198
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 février 2005

je comprend pas tres bien ce qu'est un vecteur vous pouvez mexpliquer. C du C++ ça non?
Cmill
Messages postés
198
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 février 2005

je comprend pas tres bien ce qu'est un vecteur vous pouvez mexpliquer. C du C++ ça non?
Cmill
Messages postés
198
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 février 2005

je comprend pas tres bien ce qu'est un vecteur vous pouvez mexpliquer. C du C++ ça non?
Cmill
Messages postés
198
Date d'inscription
lundi 2 juin 2003
Statut
Membre
Dernière intervention
15 février 2005

je comprend pas tres bien ce qu'est un vecteur vous pouvez mexpliquer. C du C++ ça non?
Cmill
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
28
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
14 septembre 2004

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?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
pourquoi pas un vector<objet> ?

et pourquoi le pointeur temp ?

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

enfin ca reste quand meme moin lourd, non?
Messages postés
28
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
14 septembre 2004

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++).
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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 ?