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 :

liste chaine compilation err invalid conversion from 'void*' to 'pile*


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 62
    Points : 38
    Points
    38
    Par défaut liste chaine compilation err invalid conversion from 'void*' to 'pile*
    Debutant en c++ erreure de compilation et je ne trouve pas...

    liste chaine compilation err invalid conversion from 'void*' to 'pile*


    |13|error: invalid conversion from 'void*' to 'pile*' [-fpermissive]|


    Les éléments de la liste sont chaînés entre eux à l'aide de pointeurs sur leurs éléments suivants ou précédents voir sur les deux.

    Voici pile.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
    #ifndef CGI_pILE_H
    #define CGI_pILE_H
     
     typedef struct pile    /*  Structure représantant un élément de la pile. */
           {        int valeur;
                    struct pile *prec;
            }
     pile ;
     
    pile *MAPile= NULL;
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    void Push(pile **, int Val);       /*  Push empile une valeur sur la pile. */
    /****************************************************************
    Voici le cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "pile.cpp"
     
    void Push(pile **p, int Val)
    {
     
            pile *element = malloc(sizeof(pile));
            if(!element) exit(EXIT_FAILURE);     /* Si l'allocation a échouée. */
            element->valeur = Val;
            element->prec = *p;
            *p = element;       /* Le pointeur pointe sur le dernier élément. */
    }
    /****************************************************************
    et voici le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "pile.h"
     
    int main()
    {       pile *MaPile = NULL;   /* Impératif de l'initialiser à NULL */
           Push(&MaPile, 10);
            Push(&MaPile, 25);
            Push(&MaPile, 33);
            Push(&MaPile, 12);      /* Empile 4 valeurs. */

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Points : 1 211
    Points
    1 211
    Par défaut
    Bonjour,

    Cela vient probablement du malloc(). Pourquoi s'embêter à faire une liste chaînée C-like lorsqu'on fait du C++ ? Ça n'aurait pas été mieux en C, ou alors en C++ avec les bonnes méthodes (new à la place de malloc, classes au lieu de structures ...) ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 127
    Points : 33 036
    Points
    33 036
    Billets dans le blog
    4
    Par défaut
    L'erreur est assez explicite..

    malloc retourne un void*, tu veux un pile*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pile *element = (pile*)malloc(sizeof(pile));
    Mais bon, quitte à faire du C++, commence par utiliser new et delete.
    Ou mieux, la std.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    ↑Pourquoi faire un C-Style cast là où un static_cast suffit? C'est overkill.

    Mais je plussoie tout le reste de ton message: Si on développe en C++, autant utiliser new ou une std::list<>.

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 29/10/2008, 14h33
  2. Réponses: 4
    Dernier message: 15/10/2008, 21h30
  3. Réponses: 7
    Dernier message: 16/02/2008, 07h30
  4. error: invalid conversion from `const wxChar*' to `CHAR*'
    Par barbarello dans le forum wxWidgets
    Réponses: 16
    Dernier message: 31/01/2006, 11h28
  5. Réponses: 2
    Dernier message: 24/12/2005, 11h37

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