IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

des vector, des typedef et des fonctions.


Sujet :

SL & STL C++

  1. #1
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut des vector, des typedef et des fonctions.
    Bonjour,
    voilà, je gére quelques vector sur des pointeurs d'objet de classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	std::vector<ItemBloc*> vItemBloc;
    	std::vector<ItemZone*> vItemZone;
    	std::vector<ItemDiv*> vItemDiv;
    ItemBloc Zone et Div sont des classes et toute trois dérivent de baseitem.
    Bref...

    a un moment donnée j'aimerais bien vider ces tableaux.
    A la base j'ai pondu ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	Uint16 s=vItemBloc.size();
    	for(Uint16 i=0;i<s;i++) delete vItemBloc[i];
    	vItemBloc.clear();
    (je vide et j'appelle le destructeur de l'objet par la même occasion)
    et puis je me suis dis, je vais faire une fonction qui va me faire celà, je n'aurait plus qu'a appeller ma fonction en lui passant mon vecteur.
    J'ai commencé par definir un type (pour la lisibilité)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef std::vector<baseitem*> vItems;
    voila donc mon vItems est un vecteur de pointeur sur baseitem.

    et puis je em susi dit, je ne vais pas passer tout le vecteur en parametre, juste un pointeur vers celui ci...
    voici ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void level::PurgevItem(vItems* v)
    {
    // pour l'instant elle ne fait rien...
    }
    et voici comment je l'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PurgevItem(&vItemBloc);
    j'en suis même pas encore a mettre mon code dans ma fonction que dejà ca ne compile pas
    voici mon message :
    error C2664: 'PurgevItem' : cannot convert parameter 1 from 'class std::vector<class ItemBloc *,class std::allocator<class ItemBloc *> > *' to 'class std::vector<class baseitem *,class std::allocator<class baseitem *> > *'

    et bien... c'est costaud ca !
    de toute evidence il n'aime pas que je lui parle de la classe de base hein...
    y a t'il une solution ? il n'y a pas moyen de faire ce genre d'operation sans être trop précis au niveau des elements du vecteur ???

    D'avance Merci.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il te faut une fonction template (et un passage par référence plutôt que par pointeur -- c'est toujours mieux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template <typename T>
    void PurgeContainer(T& Container)
    {
        for (T::const_iterator it = Container.begin(); it != Container.end(); ++it)
            delete *it;
     
        Container.clear();
    }
    Ca marchera avec n'importe quel conteneur dont les éléments sont des pointeurs.

  3. #3
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    Trop excellent ! merci.
    ca marche nickel et du premier coups !
    J'ai verifié mes destructeurs sont bien appelé !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Points : 307
    Points
    307
    Par défaut
    Pour les conteneurs et l'héritage, voir aussi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/08/2009, 13h41
  2. [Collections] Fonctionnement des Vector
    Par Ubum dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 16/03/2006, 11h40
  3. Cumul des jours ouvrables d'après une fonction
    Par molene34 dans le forum Access
    Réponses: 11
    Dernier message: 14/03/2006, 22h40
  4. Somme des champs ? existe t il une fonction ...
    Par dark_vidor dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/01/2006, 11h57
  5. vector de pointeurs sur des objet
    Par jean-bobby dans le forum SL & STL
    Réponses: 26
    Dernier message: 06/08/2004, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo