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

C++ Discussion :

afficher une pile en POO


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut afficher une pile en POO
    Bonjour,
    sil vous plait je fais de la POO
    j'essai sans succès d'afficher une pile en C++
    Dans mon fichier .h j'ai declaré void Afficher(elt *lapile);
    Dans mon fichier .cpp j'ai declaré void pile::Afficher(elt *lapile);
    Dans mon Programme principal j'ecris (*une_pile).Afficher(une_pile);
    quand je compile j'ai comme erreur
    9 C:\Users\Achille\Documents\mes docs\c++\une_pile\unepile.cpp no matching function for call to `pile::Afficher(pile*&)'
    note C:\Users\Achille\Documents\mes docs\c++\une_pile\pile.h:21 candidates are: void pile::Afficher(elt*)
    MERCI de m'aider

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut, et bienvenue sur le forum.

    Il "suffit" pourtant de lire le message d'erreur, pour autant que l'on comprenne l'anglais de base.

    Le compilateur se plaint de ne trouver aucune fonction Afficher prenant comme paramètre un pointeur sur un objet de type pile et t'avertit que le candidat qu'il a trouvé demande... un pointeur sur un objet de type elt comme argument

    Ceci dit, si tu veux une aide plus efficace, il est généralement intéressant de nous passer un code minimum compilable reproduisant le problème, car Madame Irma est partie aux sports d'hiver, et on ne sait pas quand elle rentrera (en plus, j'ai entendu dire que sa boule de crystal est en panne )
    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
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Par défaut
    Une question me turlupine :

    Quelle est l'utilité de passer une pile en paramètre à ta fonction afficher qui est déjà une fonction de la classe pile?

    D'ailleurs on voit bien qu'il y'a redondance dans ton code.

    (*une_pile).Afficher(une_pile);
    Enfin, j'aime pas cette écriture (même si elle est tout à fait correcte)
    (*une_pile).Afficher
    Je lui préfére :

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par lcfseth Voir le message
    Une question me turlupine :

    Quelle est l'utilité de passer une pile en paramètre à ta fonction afficher qui est déjà une fonction de la classe pile?

    D'ailleurs on voit bien qu'il y'a redondance dans ton code.



    Enfin, j'aime pas cette écriture (même si elle est tout à fait correcte)

    Je lui préfére :
    Il y a cela aussi, mais, alors, si on part sur ce terrain on est très largement en droit de se demander pourquoi passer par un pointeur...

    Et seul le code complet est en mesure de nous permettre de traquer les erreurs de ce genre
    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

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Par défaut
    Si je devais deviner, je dirais que c'est des résidu de C. Mais bon comme tu dis, un bout de code serait le bien venu.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    Voici le code de ma methode afficher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void pile :: Afficher( elt *lapile)
     { elt *p;
        p=lapile;
        while(p!=NULL)
        { cout<<"\nLa valeur  est \n"<< (*p).valeur;
        p=(*p).suivant;
      }
     }

    il faut bien que j lui passe un parametre pour qu' elle affiche

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Ce qu'il faut, c'est que tu prenne conscience que tu dois respecter une logique stricte, et clairement définie...

    Pour cela, tu dois réfléchir un temps soit peu à ce que tu fais.

    Ainsi, pour quand même te donner la réponse, un simple:
    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
    bool Pile::empiler(int val)
    {
        /* créons un nouvel objet de type structure */
        structure * temp=new structure;
        /* si la création échoue, on le signale */
        if(!temp)
            return false;
        /* assignons la valeur correcte au contenu de ce nouvel objet */
        temp->valeur = valeur;
        /* et relions le à l'objet qui est, pour l'instant, au sommet de la pile */
        temp->suivant = element;
        /* il est temps de faire en sorte que le nouvel objet soit... au sommet
         * de la pile 
         */
        element = temp;
        /* et de signaler que tout s'est bien passé */
        return true;
    }
    agit exactement comme nous sommes en droit de l'espérer...

    Mais, si tu suis une logique erronée, il ne faut pas t'étonner si tu n'arrive à rien

    Je ne le répéterai jamais assez, il ne sert à rien de se ruer sur le clavier et de commencer à "vomir" du code si l'on n'a pas, au minimum, une idée claire et précise des différentes étapes qu'il par lesquelles il faut passer
    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

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    Merci bien encore pour toute l'aide

    ce code suscite en moi une question qui a toujours été mon probleme où se créé la queue de la pile (qui en est fait le tout premier element créé pour la pile )

    en fait pour la queue on devrait avoir element->suivant=NULL

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Le principe d'une pile, c'est que le premier élément inséré sera quoi qu'il arrive le dernier élément auquel tu aura accès.

    C'est ce que l'on appelle un système LIFO(Last In, First Out... Premier entré, dernier sorti, si tu préfères en français)...

    En effet, si tu empile des caisses, tu ne peux pas essayer d'accéder à la première que tu as placée avant d'avoir retiré toutes les autres, au risque de... toutes te les ramasser sur la tête

    c'est pour cela que tu dois faire en sorte de relier l'élément que tu veux rajouter à la pile au dernier élément de la pile, puis que tu dois définir cet élément comme étant... le dernier élément de la pile.

    Le premier élément rajouté obtient la valeur NULL pour "l'élément suivant", ce qui indiquera qu'il n'y en a pas d'autre et... indiquera donc... qu'un a atteind la fin de la pile.

    Mais peut être veux tu créer en réalité une file, un peu à l'instar de ce que l'on rencontre aux caisses des magasins, où le premier arrivé est le premier servi...

    C'est alors un système FIFO (First In, First out... Premier entré, Premier sorti si tu préfère en français)

    Dans ce cas, tu dois garder un pointeur sur le premier élément qui sera retiré et, *idéalement*, pour ne pas devoir parcourir l'ensemble des éléments lorsque tu veux en ajouter un, un pointeur sur le dernier élément rajouté...

    Tu rajoute alors les éléments à un bout et tu les retire à l'autre...
    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

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    ok merci bien
    Je profite pour poser un autre probleme coomment calculer le sinus d'un angle(valeur(quelleest son unité) entrée au clavier)

    Merci encore

  11. #11
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par patricx Voir le message
    ok merci bien
    Je profite pour poser un autre probleme coomment calculer le sinus d'un angle(valeur(quelleest son unité) entrée au clavier)

    Merci encore
    Sinus (et les autres, d'ailleurs) n'a pas d'unité propre.

    Il est calculé sur base d'un angle généralement exprimé en radian.

    Les fonctions sin, cos, tan, atan et toutes les autres sont déclarées, entres autres, dans le fichier d'en-tête <cmath>.
    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

Discussions similaires

  1. Afficher la pile d'appel Tcl depuis une fonction C
    Par grismauve dans le forum Tcl/Tk
    Réponses: 0
    Dernier message: 19/09/2009, 10h22
  2. Réponses: 14
    Dernier message: 20/04/2007, 09h09
  3. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13
  4. Afficher une buffer de pixel avec Direct3D
    Par Black_Daimond dans le forum DirectX
    Réponses: 4
    Dernier message: 27/12/2002, 22h18
  5. Copier et afficher une copie d'ecran
    Par Bobx dans le forum Langage
    Réponses: 6
    Dernier message: 02/08/2002, 22h20

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