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 :

Expected constructor,destructor or type convesrion before * token


Sujet :

C++

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut Expected constructor,destructor or type convesrion before * token
    Salut, voila mon code écrit en C++ , ça semble bien mais j'ai cette erreur qui interrompe l'éxecution: Expected constuctor, destructor or type conversion before '*' token,dans la ligne 33( l'instruction: ListeP *initialisation()), voici mon code:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <iostream>
     
    int main(){
    // déclaration de la liste  des éléments d'un processus
        typedef struct Element Element;
    struct Element
    {
    int nbr;
    Element *suivant;
    };
     
    // déclaration du pointeur premier élément de chaque processus
    typedef struct ListeE ListeE;
    struct ListeE
    {
    Element  *premierE;
    };
    // déclaration de de la liste des  processus
    typedef struct Proc Proc;
    struct Proc
    {
    Element proc;
    Proc  *suivant;
    };
    // déclaration du pointeur du premier processus
    typedef struct ListeP ListeP;
    {
    Proc *premierP;
    };
    system("pause");
    }
    //initialisation de la liste des processus
    ListeP   *initialisation()
    {
        ListeP *listeP = malloc(sizeof(*listeP));
        Proc *proc = malloc(sizeof(*proc));
     
        if (listeP == NULL || elementP == NULL)
        {
            exit(EXIT_FAILURE);
        }
     
     
        proc->suivant = NULL;
        listeP->premier = proc;
     
        return listeP;
    }
    alors pourriez vous m'aider? et merci

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

    Informations professionnelles :
    Activité : aucun

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

    D'abord et avant tout : le code que tu présentes ressemble beaucoup plus à du C qu'à du C++, malgré le fait que tu inclue le fichier d'en-tête <iostream>.

    La première question que je vais donc te poser est : ta question porte-t-elle sur du C ou sur du C++

    Nous sommes bien d'accord que C peut être considéré comme un sous ensemble de C++, mais bon... De nombreuses (bonnes) habitudes issues du C sont considérées comme de très mauvaises pratiques en C++ La réponse à cette question me permettra de déterminer si je dois déplacer la discussion ou si je peux la laisser dans cette section

    Ceci dit, le problème apparaitra un peu plus clairement en respectant des règles d'indentation strictes. Je vais copier ton code en me contentant de l'indenter correctement pour que tu puisses te faire une idée :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    int main(){
        // déclaration de la liste  des éléments d'un processus
        typedef struct Element Element;
        struct Element
        {
            int nbr;
            Element *suivant;
        };
     
        // déclaration du pointeur premier élément de chaque processus
        typedef struct ListeE ListeE;
        struct ListeE
        {
            Element  *premierE;
        };
        // déclaration de de la liste des  processus
        typedef struct Proc Proc;
        struct Proc
        {
            Element proc;
            Proc  *suivant;
        };
        // déclaration du pointeur du premier processus
        typedef struct ListeP ListeP;
        {
            Proc *premierP;
        };
        system("pause");
    }
    //initialisation de la liste des processus
    ListeP   *initialisation()
    {
        ListeP *listeP = malloc(sizeof(*listeP));
        Proc *proc = malloc(sizeof(*proc));
     
        if (listeP == NULL || elementP == NULL)
        {
            exit(EXIT_FAILURE);
        }
     
     
        proc->suivant = NULL;
        listeP->premier = proc;
     
        return listeP;
    }
    Peut être as-tu déjà trouvé "ce qui cloche"

    Hé oui, toutes tes structures sont définies à l'intérieur de la fonction main.

    Ce n'est pas illégal en soi (du moins, en C++), mais cela peut poser un problème de taille : les structures ne sont connues que dans la portée dans laquelle elles sont déclarées

    Autrement dit : le seul endroit où tes différentes structures sont connues du compilateur, c'est... à l'intérieur de la fonction main.

    Du coup, quand il rencontre le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListeP *listeP = malloc(sizeof(*listeP));
    dans la fonction initialisation(), hé bien, comme on est en dehors de la fonction main(), il ne connait purement et simplement pas le type ListeP.

    Et c'est ce qui occasionne l'erreur que tu nous décris

    Il y a bien d'autres remarques à faire sur ton code, mais comme une bonne partie d'entre elles dépendra du langage que tu veux utiliser, je vais attendre que tu m'aie répondu à la question que j'ai posée au début de mon intervention
    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 du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Oui je vois clairement ma faute, mon programme est écrit en C++, je suis en train d'utiliser Dev C++ ; au début je l'ai écrit en C en utilisant codeblocks mais comme j'ai rencontré des problèmes(des fichiers suspect) j'ai utiliser DEV C++,j'ai pas des bonnes connaissances en C++ alors j'ai supposé qu'un programme C est équivalent à C++, et j'ai travaillé juste en remplaçant include<stdio.h> par include <iostream.h> ; donc c'est un programme C++ , merci pour m'aider à remarquer ma faute, et pour m'informer qu'il y'ait une différence remarquable entre C et C++.

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par SaFa01InF Voir le message
    Oui je vois clairement ma faute, mon programme est écrit en C++, je suis en train d'utiliser Dev C++ ;
    Dev C++ n'est plus maintenu depuis maintenant minimum trois ans! Tu devrais vraiment plutôt utiliser code::blocks dont le développement est toujours actif

    au début je l'ai écrit en C en utilisant codeblocks mais comme j'ai rencontré des problèmes(des fichiers suspect) j'ai utiliser DEV C++,
    Comment ca, des fichiers suspects?
    j'ai pas des bonnes connaissances en C++ alors j'ai supposé qu'un programme C est équivalent à C++,
    Ce n'est pas le cas du tout

    C++ ne renie absolument pas son héritage de C, mais il s'agit, réellement, de deux langages totalement différents, ne serait-ce qu'au niveau des paradigmes qu'ils supportent
    et j'ai travaillé juste en remplaçant include<stdio.h> par include <iostream.h> ; donc c'est un programme C++ ,
    Comme je te l'ai dit, ce n'est pas cela qui fait que tu programme en C++...

    Surtout si tu inclus le fichier iostream.h, qui est le nom d'un fichier datant d'avant la standardisation du langage.

    C'est, entre autres, pour cela que je te conseille vivement d'utiliser code::blocks au lieu de Dev-C++ : il vient avec un compilateur beaucoup plus récent

    merci pour m'aider à remarquer ma faute, et pour m'informer qu'il y'ait une différence remarquable entre C et C++.
    Avec un grand plaisir

    Je suis un peu trop fatigué pour t'indiquer ce qu'il faut changer, mais j'essayerai de faire cela assez rapidement
    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 du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Merci encore une fois pour me clarifier, j'avais un problème de compilater et j'arrive à le résoudre ^^ maintenant ça marche, j'utiliserais le langage C avec le codeBlocks

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/06/2014, 09h29
  2. Réponses: 11
    Dernier message: 04/03/2009, 14h41
  3. expected primary-expression before '=' token
    Par steph_p dans le forum Débuter
    Réponses: 4
    Dernier message: 02/02/2009, 17h03
  4. Réponses: 5
    Dernier message: 05/05/2006, 19h07

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