[c++] vecteur de classes

vecteur de classes [c++] - C++ - Programmation

Marsh Posté le 07-12-2004 à 20:46:05    

Bonjour, j'ai 'fait' un vector de classes, que je remplit avec des objets de ma classe principale, ou des objets hérités.
 
Mais j'aimerai pouvoir faire par la suite : vecteur[i].affiche(); par exemple, ou affiche est une fonction de mes classes, mais le compilateur (Visual .NET) me dit que error C2228: left of '.affiche' must have class/struct/union type  :sweat:  
 
Il doit exister un moyen de contourner ca, je pense, mais je ne sais pas lequel.  
 
 
 
Merci  :hello:  :jap:


---------------
.
Reply

Marsh Posté le 07-12-2004 à 20:46:05   

Reply

Marsh Posté le 07-12-2004 à 20:55:50    

operator [](int) ?

Reply

Marsh Posté le 07-12-2004 à 20:56:28    

bjone a écrit :

operator [](int) ?


 
 :??:


---------------
.
Reply

Marsh Posté le 07-12-2004 à 20:58:21    

c'est vector<> que tu utilises, où tu as refais ta propre template à-la-vector, ou tu as fait une classe vecteur<> qui dérive de vector<> ?

Reply

Marsh Posté le 07-12-2004 à 20:58:43    

bjone a écrit :

c'est vector<> que tu utilises, où tu as refais ta propre template à-la-vector, ou tu as fait une classe vecteur<> qui dérive de vector<> ?


 
j'utilise vector<>
 

Code :
  1. vector<Client *> VecCli;


Message édité par didier1809 le 07-12-2004 à 20:59:09

---------------
.
Reply

Marsh Posté le 07-12-2004 à 20:59:16    

et de toutes manières si ta classe dans le vector<> a .affiche() ça devrait marcher.

Reply

Marsh Posté le 07-12-2004 à 20:59:43    

a->affiche() :sarcastic:

Reply

Marsh Posté le 07-12-2004 à 20:59:53    

avec vector<Client *> :
VecCli[20]->affiche();
 
avec vector<Client> :
VecCli[20].affiche();

Reply

Marsh Posté le 07-12-2004 à 21:00:06    

grilled :D

Reply

Marsh Posté le 07-12-2004 à 21:00:46    

sinon attention à la destruction de ton vector<>, tes instances de Client ne sont pas détruites.

Reply

Marsh Posté le 07-12-2004 à 21:00:46   

Reply

Marsh Posté le 07-12-2004 à 21:03:39    

J'adore VC6, il ne voulait pas le faire, je recompile, et hop, miracle, les methodes apparraissent  :pfff:  
 
Désolé du dérangement les gars  :sweat:  
 
J'avais essayé comme ca d'abord, mais je sais pas ce qui a merdé  :sweat:  
 
 
Enfin bon, ca marche c'est le principal


---------------
.
Reply

Marsh Posté le 07-12-2004 à 21:04:10    

bjone a écrit :

sinon attention à la destruction de ton vector<>, tes instances de Client ne sont pas détruites.


 
oui j'ai vu ca en faisant une recherche ici, il faut faire une boucle avec un delete dedan  :o


---------------
.
Reply

Marsh Posté le 07-12-2004 à 21:05:23    

j'ai vu passer un phantôme.

Reply

Marsh Posté le 07-12-2004 à 22:14:09    

huh ?

Reply

Marsh Posté le 07-08-2013 à 18:25:09    

didier1809 a écrit :


 
oui j'ai vu ca en faisant une recherche ici, il faut faire une boucle avec un delete dedan  :o


 
Salut
 
C'est exactement mon problème actuel , Comment faire cette boucle avec un delete?  
 
Merci :)

Reply

Marsh Posté le 07-08-2013 à 18:30:06    

T'as deux solutions :  
 

Code :
  1. for (std::vector< type >::iterator it = MonVector.begin(); it != MonVector.end(); ++it)
  2.   {
  3.     type* Instance = (*it);
  4.     delete Instance;
  5.   }
  6.   // Ou :
  7.   for (size_t i = 0 ; i < MonVector.size(); ++i)
  8.   {
  9.     type* Instance = MonVector[i];
  10.     delete Instance;
  11.   }


 
Maintenant, ce que je te recommanderais c'est de ne pas utiliser de pointeurs nu mais des std::unique_ptr / std::shared_ptr pour gérer le cycle de vie de tes objets. (La destruction se fera sans delete)


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 07-08-2013 à 18:35:18    

j'aurais plutôt dit : t'as deux solutions : les std::shared_ptr (si tu veux étendre la durée de vie au-delà de celle de ton conteneur) ou les std::unique_ptr (si tes données ont une durée de vie strictement égale à celle de ton conteneur).

 

Ca t'évite de te soucier avec la boucle pour libérer. C'est plus propre. C'est du C++ moderne.


Message édité par theshockwave le 07-08-2013 à 18:35:31

---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed