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
    Candidat au Club
    Inclusion de header dans main.cpp + problème de déclaration de classe
    Je rencontre un problème plutôt spéciale depuis 2 jours et je n'arrive pas à mettre le doigt sur ce qui n'est pas correct. Je déclare une classe dans un .h comme d'habitude, je défini certaines partie de la classe dans un .cpp et j'inclus le .h dans main.cpp. Jusque là tout devrait bien aller. J'écris un programme pour un exercice d'un cour. voici l'explication de l'exercice plus le code que j'ai écris. Note: J'ai fais une recherche sur un problème semble mais je n'ai rien trouvé qui se rapproche du mien.

    /*

    Exercice 2 (5 points)
    Une compagnie d'autobus vient d'acheter un ordinateur pour son
    nouveau système de réservations informatisé. Cette compagnie
    possède 2 autobus; ces autobus transportent 2000 passagers par
    année vers New York. Le voyage aller et retour est de 3 jours.

    Écrivez un programme qui attribue des sièges aux passagers lors
    d'un voyage, en tenant compte que chaque autobus transporte soit
    des fumeurs, soit des non-fumeurs.

    Le programme doit afficher le menu suivant :

    * Appuyez sur 1 pour non-fumeurs
    * Appuyez sur 2 pour fumeurs


    Si la réponse est 1, le programme attribue un siège dans un autobus
    de non-fumeurs (1 à 40). Dans le cas contraire, il attribue un siège
    dans un autobus de fumeurs (1 à 40). De plus, le programme devrait
    afficher à l’écran un document de voyage qui indique si le passager
    est dans un autobus de fumeurs ou de non-fumeurs et combien de
    passagers il y a dans l'autobus.


    je ne comprends pas vraiment mon erreur

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include<string.h>
     
    int main(){
     
     return 0;
    }


    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
    19
    20
    21
    22
    23
    #ifndef TRAVELCMANAGER_H
    #define TRAVELCMANAGER_H
     
    class TravelManager {
     
    public:
            TravelManager(int );
            ~TravelManager();
     
            //Set
            void setPgrData(char *, bool, char *); //Ajout du nom du passager
            //et s'il est fumeur, création de la destination.
            //(string name, bool smoker, string destination)
     
            //Get
            void displayPgrData();
            void displayTravelData();
     
    private:
            char *pgrName;
            int test;
    };
    #endif


    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
    19
    20
    21
    22
    23
    /**********************
     
    travelcManager.cpp
     
    **********************/
     
    TravelManager::TravelManager(int num){
     
            test  = num;
            pgrName = new char[12];
     
    }
     
    TravelManager::~TravelManager(){
     
        if(pgrName){
                    pgrName = "";
        }
    }
     
    void TravelManager::setPgrData(char *name, bool smoker, char *destination){
     
    }

  2. #2
    Expert éminent
    Citation Envoyé par lizeur1994 Voir le message
    je ne comprends pas vraiment mon erreur
    moi non plus

    Où sont les implémentations des méthodes void displayPgrData(); et void displayTravelData(); ?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TravelManager::~TravelManager(){
     
        if(pgrName){
                    pgrName = "";
        }
    }

    Ton destructeur est mauvais. Cela ne fonctionne pas comme cela - tu n'as pas de ramasse-miettes ("garbage collector" en anglais) delete[] pgrName; pgrName = NULL /* or nullptr*/;

  3. #3
    Expert éminent sénior
    Salut,

    En lecture rapide:
    • <string.h> (main.cpp), c'est un fichier d'en-tête issu du C. De loin, je dirais qu'il n'a rien à foutre là
    • void setPgrData(char *, bool, char *); (a) A moins que ce ne soit un nom de fonction imposé par ton prof (qui mériterait alors le fouet), essaye de choisir des noms de fonction qui indiquent un minimum ce qu'elles sont sensées faire... Tu n'imagine pas le temps que l'on peut gagner simplement quand les choses sont correctement nommées. Et tu ne dois pas vraiment t'en faire pour la longueur du nom que tu choisi, pour autant qu'il indique clairement (même à ceux qui ne sont pas juste à coté de toi) à quoi la "chose désignée" doit servir
    • void setPgrData(char *, bool, char *); (b) si tu dois manipuler des chaines de caractères, tu aurais largement intérêt à utiliser std::string
    • pgrName = new char[12];, char *pgrName; tout ce qui utilise pgrName, en fait, devrait manipuler des std::string... D'autant plus que, là, tu te retrouve avec une belle fuite mémoire
    • Pour le reste, il maque tellement dans ton code qu'il est difficile de voir les problèmes qui s'y cachent
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Candidat au Club
    Citation Envoyé par foetus Voir le message
    ...
    Si je comprends bien je suis complètement à côté de la plaque &#128546;&#128546;

  5. #5
    Expert éminent sénior
    Heuu ... oui, en effet ... Mais c'est toi qui l'a dit
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Rédacteur/Modérateur

    - main inclue un header C
    - main n'inclue à aucun moment la classe
    - l'implémentation de la classe n'inclue pas sa définition
    - l'implémentation de la classe est incomplète
    - const char*
    - std::string
    - tu as une erreur que tu ne donnes jamais
    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.

  7. #7
    Candidat au Club
    merci beaucoup je crois avoir compris

###raw>template_hook.ano_emploi###