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

 C++ Discussion :

Iterateur sur classe imbriquée


Sujet :

C++

  1. #1
    Candidat au Club
    Iterateur sur classe imbriquée
    salut à tous, je suis nouveau et débutant. J' ai fait un projet sur c++, il possède 3 classes:box, package, truckload. J' ai fait ensuite une liste chaînée sur les box et ensuite imbriqué package dans truckload. J' ai mis ensuite un itérateur à l' interieur de truckload pour le parcourir, mais il y a érreur lors de la compilation. Je vous donne le fichier, je n' arrive pas a trouvé la solution..Le compilateur dit que getfirstBox() n'est pas fonction membre.

  2. #2
    Expert éminent sénior
    Salut, et bienvenue sur le forum.

    Avant toute chose, pourrais tu nous faire un copier/coller du code des différents fichier en utilisant la balise [ CODE ] (sans les espace) au début et la balise [ / CODE ] (sans les espaces, toujours) à la fin (ces deux balises peuvent être mises automatiquement en cliquant sur le bouton en forme de # qui se trouve juste au dessus de la zone d'édition, sur la droite).

    Ce sera beaucoup plus facile que d'utiliser une image de ton éditeur de texte, parce que cela nous permettra de le sélectionner avant de le copier de notre coté, alors qu'avec l'image, nous serions obligés de le copier "caractère par caractère".

    D'ailleurs, il est également possible -- a priori -- de copier les messages émis par le compilateur dans la zone dans laquelle ils apparaissent. Si tu pouvais nous copier / coller tous les messages émis par le compilateur, cela nous permettrait de savoir "plus facilement" pourquoi il se met à t'engueuler

    De même, tu devrais -- pour ta propre facilité -- t'habituer à respecter les mêmes règles d'indentation dans tous tes fichiers, surtout quand ce sont plusieurs fichiers appartenant à un même projet.

    Et tu devrais, tant qu'à faire, choisir une politique très stricte pour l'indentation, et t'y tenir.

    L'indentation dans truckload.h est franchement pas mal entre la ligne 12 et la ligne 34, parce que cette manière de présenter le code nous permet de repérer plus facilement les groupes qui se forment naturellement:

    On remarque, par exemple, très facilement que les données et les fonctions membres de ta classe Package (pBox, pNext, constructeur et destructeur) se trouvent dans l'accessibilité privée de la classe, avec toute les restrictions que cela peut impliquer.

    Par contre, les lignes 35 et 36 ne respectent pas les mêmes règles que les lignes qui précèdent.

    Si ce n'est pas *** catastrophique ***, c'est en tout cas *** dommage ***, parce que cela n'aurait pas pris plus de temps, et cela aurait assuré la cohésion dans ton code, cela n'aurait pas donné une image dans laquelle on a l'impression d'avoir une tache au beau milieu.

    Par contre, c'est catastrophique dans le fichier Box.h, car dans ce fichier, il n'y a absolument aucune indentation, si bien que l'on ne sait pas dire (à moins de lire l'ensemble du fichier) ce qui fait partie de quel groupe.

    Si je prend "au hasard" la ligne 22 de ce fichier, par exemple, il faut vraiment que je commence à être très attentif à chaque ligne qui précède pour savoir que je me trouve dans la fonction compare et chaque ligne qui suit pour savoir où cette fonction s'arrête.

    Si cette fonction avait pris la forme de
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int compare(Box const & box) const
    {
        if(volume() < box.volume())
            return -1;
        if(volume == box.volume())
            return 0;
        return 1;
    }
    les choses auraient été beaucoup plus claires, car on voit directement le début et la fin de la fonction, et on voit même directement ce qui doit être fait en fonction des différentes conditions

    Enfin, chaque accolade ouvrante doit disposer de sa consoeur fermante, et, s'il se peut que l'accolade fermante correspondant à celle qui est ouverte à la ligne 11 de trucload.h n'est peut-être simplement pas visible, on a l'impression qu'elle manque purement et simplement (tu comprends pourquoi il vaut mieux donner le code écrit plutôt qu'une impression écran )

    Donc, pour répondre à ta question, les fonction getFirstBox et getNextBox appartiennent, en l'état à la classe Truckload::iterator alors que, sauf erreur de ma part, tu voudrais qu'elle appartiennent à... la classe Truckload.
    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

  3. #3
    Candidat au Club
    Merci pour ta réponse koala01. A la prochaine fois, je copierai le code, je ne le savais pas. J' ai suivi ton conseil et c'est resolu!!!Merci