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

Langage C++ Discussion :

Message d'erreur dans l'insertion d element d'une pile


Sujet :

Langage C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut Message d'erreur dans l'insertion d element d'une pile
    Bonjour,
    J'ai un message d'erreur du type :
    "Erreur C2061 : syntaxe error : identifier 'Element' "
    Il se situe sur la deuxième ligne de "InsertionElementDansPile" du code ci-dessous.

    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
    24
    25
    26
     
    /*...*/
    typedef struct ElementDePile{
         int valeurs;
         struct ElementDePile *Suivant;
    }ElementDePile, *EDP;
     
    EDP NouvellePileDeElement(void){
         return NULL;
    }
     
    bool TestPileDeElement(EDP TPDE){
         if(TPDE == NULL){
                return false;
         }
         else{
                return true;
         }
    }
     
    EDP InsertionElementDansPile(EDP Pile, int a){
         EDP *Element;
         Element = static_cast<Element*>(malloc(sizeof(Element)));
         /.../
    }
    /*...*/

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Bonjour,
    1. L'erreur vient du static_cast: Le type Element* n'existe pas.
    2. Si tu es en C++, pourquoi utilises-tu malloc(), et pourquoi utilises-tu un typedef struct X {} X;?
      En C++, struct X {} suffit, et le malloc() est avantageusement remplacé par new. Qui, en C++ moderne, est avantageusement remplacé par un unique_ptr<ElementDePile> et make_unique().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Ne te serais tu pas trompé de section, car, à l'exception du static_cast, qui n'existe effectivement qu'en C++ ce code est du pur C

    Si on peut trouver "un certain intérêt" (en cherchant vraiment très bien ) au fait d'implémenter soi-même une collection quelconque (qu'il s'agisse d'une pile, d'une file, d'une liste quelque soit sa forme ou d'un arbre binaire) en C++, encore faut il le faire en utilisant le langage car, après tout, tu ne viens pas discuter sur ce forum en latin, hein ?!?

    Or, le latin est au francais ce qu'est le C au C++ : un ancêtre dont ni le francais ni le C++ ne renient l'origine, mais qui reste malgré tout, une langue / un langage totalement différent

    PS : si tu t'es trompé de section, nous pourrons demander à la modération de déplacer ton message
    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
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut
    Normalement je voulais tout coder en C.
    J'avais utilisé le static_cast pour corriger les messages d'erreurs du code d'origine ci-dessous qui m'avait donné 2 messages d'erreurs.
    Ce code se compiler avant plus maintenant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /*...*/
    EDP InsertionElementDansPile(EDP PDE, int a){
         EDP *Element;
         Element = malloc(sizeof(*Element));
    }
    /*...*/
    Les messages d'erreurs
    - erreur C2440: '=': cannot convert from 'void *' to EDP *'
    - note: Conversion from void* to pointer to non 'void' requires an explicit cast
    Je sais que c'est pas bon de mélanger les deux, mais je n'avais pas le choix je ne trouvais pas de solution pour le corriger en C.

    Si vous en avez-une pour corriger la ligne Element = malloc(sizeof(*Element));

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par carmen256 Voir le message
    Normalement je voulais tout coder en C.
    Si tu veux codeer en C, code en C!!! Si C++ supporte dans une mesure de plus en plus faible de manipuler du code C, C n'a jamais accepté -- et n'acceptera jamais -- de manipuler du C++.

    Veille aussi à utiliser le bon compilateur par rapport au code (et à l'extension des fichiers) que tu tentes de compiler, à savoir:
    1. un compilateur C si code en C, en utilisant l'extension .c pour ton fichier
    2. un compilateur C++ si tu code en C++, en utilisant l'extension .cpp (ou .cc ou même .cxx) pour ton fichier


    J'avais utilisé le "static_cast" pour corriger les messages d'erreurs du code d'origine ci-dessous qui m'avait donné 2 messages d'erreurs.
    Ben oui, mais static_cast, c'est une instruction C++, et pour qu'elle ait du sens, il faut donc que le code soit écrit ... en C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    - erreur C2440: '=': cannot convert from 'void *' to EDP *'
    - note: Conversion from void* to pointer to non 'void' requires an explicit cast
    Et ce genre d'erreur est émis par un compilateur C++, parce que justement tu essaye de lui faire compiler... du code C
    Je sais que c'est pas bon de mélanger les deux,
    C'est même pire que "pas bon"!!!

    Tu vois un peu tous les problèmes que cela t'occaionne

    mais je n'avais pas le choix je ne trouvais pas de solution pour le corriger en C.
    Reprend donc depuis le début : si tu veux coder en C, assures toi que:
    • l'extension du fichier d'implémentation est bel et bien .c
    • tu utilises bel et bien un compilateur C et non un compilateur C++

    Et, en cas de problème (sur un code C compilé avec un compilateur C), adresse toi à ==>la section d'à coté<== pour que les gens qui ont "d'avantage l'habitude" d'utiliser le C puissent te répondre.

    Par contre, si ton objectif est de travailler en C++, commence déjà par écrire du code en ... C++

    Et si tu as des problèmes, n'hésites pas à venir nous demander de l'aide ici, nous nous ferons un plaisir de te répondre

    Si vous en avez-une pour corriger la ligne "Element = malloc(sizeof(*Element));"
    Oui: vire moi cette horreur! Du moins, si tu veux travailler en C++
    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. message d'erreur dans sous formulaire
    Par tojiji dans le forum Access
    Réponses: 6
    Dernier message: 28/07/2006, 12h09
  2. Message d'erreur dans phpMyadmin
    Par riadh100 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 26/09/2005, 14h03
  3. Message d'erreur avec Bulk Insert
    Par Shivas dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 18/07/2005, 12h03
  4. [Tiles]message d'erreur dans un footer (form mal rempli)
    Par clement42 dans le forum Struts 1
    Réponses: 5
    Dernier message: 09/06/2005, 14h51
  5. Réponses: 6
    Dernier message: 02/06/2005, 12h44

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