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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2019
    Messages : 2
    Points : 1
    Points
    1

    Par défaut vector en attribut d'une classe

    Bonsoir, voici mon soucis, j'essaye d'utiliser une classe CollectionEmploye qui contient un tableau d'employe (vector). Le constructeur doit construire un vector vide et la méthode ajouterEmployé ajouter un Employé.


    Voici mon collection.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #ifndef COLLECTION_H
    #define COLLECTION_H
    #include "projetEmploye.h"
    #include "Commercial.h"
    #include "Manutentionnaire.h"
    #include "Vendeur.h"
    #include "Representant.h"
    #include "Technicien.h"
    #include <vector>
     
    class CollectionEmploye  {
       protected :
       vector<Employe*> listeEmploye;
     
       public :
       CollectionEmploye();
       void ajouterEmploye(Employe &e);
    }
    ainsi que le cpp qui va avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "Collection.h"
     
    CollectionEmploye::CollectionEmploye(){
     
    listeEmploye = new vector<Employe*> listeEmploye;
     
    }
     
    void ajouterEmploye(Employe &e) {
     
    listeEmploye.push_back(&e);
     
    }
    Est-ce que quelqu'un peut m'expliquer d'où vient mon erreur? Je débute avec les vector et en c++ et suis un peu perdu. Merci beaucoup.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 698
    Points : 11 041
    Points
    11 041

    Par défaut

    Vous avez vu les pointeurs nus avant les std::vector ?

    "std::vector" c'est la base de tout code C++ moderne et les pointeurs nus, c'est un sujet "avancées".
    Vous avez du apprendre avec un cours "historique" qui pue la naphtaline.

    Vous avez de la chance, vous n'avez qu'à reprendre le début d'un cours moderne sur le C++ qui vous expliquera très top comment vous servir de std::vector et des pointeurs intelligents, et aussi la notion d'ownership.

    Parce que votre code, au niveau "ownership", c'est une catastrophe.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    5 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 774
    Points : 25 361
    Points
    25 361

    Par défaut

    Qu'est sencé vouloir dire ceci ? listeEmploye = new vector<Employe*> listeEmploye; ?
    - Syntaxe inexplicable et totalement fausse
    - Utilisation de new alors qu'il ne s'agit pas d'un pointeur
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2019
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    Non, je n'avais jusqu'à il y a 15 minutes aucune idée de ce que pouvait être un pointeur nu.
    Concernant le constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeEmploye = new vector<Employe*> listeEmploye;
    , je voudrais initialiser un vector vide afin de le remplir par la suite avec la méthode ajouter.
    Je comprends bien que ce n'est pas du tout comme ça que je suis sensé faire mais ça ne m'avance pas beaucoup plus de le savoir.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 698
    Points : 11 041
    Points
    11 041

    Par défaut

    Il faut absolument que vous ayez les bases avant de commencer à faire des choses non triviales.
    Et "l'ownership", c'est la base de la base.
    Votre code montre que vous n'avez pas la moindre idée de ce concept.
    Reprenez un simple cours d'introduction au C++ moderne.

    On ne peut pas corriger votre code car la gestion de l'ownership n'apparait pas dans votre code.
    C'est l'une des faiblesses majeures du vieux code C++, il fallait avoir tout le code de la classe ET des codes utilisateur de cette classe pour la (l'ownership) déterminer (ou correctement la documenter).

    Si le "CollectionEmploye" est le propriétaire des éléments et que Employe est une classe "valeur" (et non entité), ce qui est peu probable (mais ça me simplifie le code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class CollectionEmploye  {
       protected :
       vector<Employe> listeEmploye;
     
       public :
       CollectionEmploye(){};
       void ajouterEmploye(Employe e);
    }
     
    void ajouterEmploye(Employe e) {
     
    listeEmploye.push_back(e);
     
    }

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

Discussions similaires

  1. Objet vector<Type> membre d'une classe
    Par Chewbi dans le forum SL & STL
    Réponses: 3
    Dernier message: 16/02/2006, 17h12
  2. [POO] retourner les attributs d'une classe
    Par ozzmax dans le forum Syntaxe
    Réponses: 10
    Dernier message: 12/01/2006, 00h10
  3. Réponses: 2
    Dernier message: 27/03/2005, 16h09
  4. [VB.NET] Parcourir les attributs d'une classe
    Par pasqwal dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/02/2005, 09h47
  5. Réponses: 7
    Dernier message: 08/01/2005, 13h24

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