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 :

Arbre AVL : erreur type de pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Alimentation

    Informations forums :
    Inscription : Décembre 2014
    Messages : 2
    Par défaut Arbre AVL : erreur type de pointeur
    Bonjour à tous, j'aurai besoin de votre aide sur une erreur de type sur un arbre AVL.
    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct {
        char val;
        int num;
        struct noeud *filsD, *filsG;
     
    }noeud, *ptrNoeud;
    ptrNoeud nouvNoeud(char valeur){
        ptrNoeud newnoeud;
        static int numero = 0;
        newnoeud= (ptrNoeud) malloc (sizeof(noeud));
        if(newnoeud){
            newnoeud->num = numero++;
            newnoeud ->val = valeur;
            newnoeud -> filsG = NULL;
            newnoeud -> filsD = NULL;
        }else {
            printf("probleme dans lallocation memoire\n");
        }
        return(newnoeud);
    }
    void parcoursprefixe (ptrNoeud n){
        if(n == NULL){
        	printf("fin de l'arbre\n");
        }
     
        printf("%c", n->val);
        parcoursprefixe(n->filsG);
        parcoursprefixe(n->filsD);
     
    }
     
    int main(){
        ptrNoeud Arbre = NULL;
        ptrNoeud noeud = NULL;
        ptrNoeud noeud1 = NULL;
        Arbre = nouvNoeud('A');
        noeud = nouvNoeud('B');
        noeud1 = nouvNoeud('C');
        parcoursprefixe(Arbre->filsG);
        printf("\n");
        return EXIT_SUCCESS;
    }
    Dans la fonction parcourspréfixe, lorsque j'effectue la récursivité avec les fils gauches et droit, il y a une erreur sur Eclipse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    passing argument 1 of 'parcoursprefixe' from incompatible pointer type
    Je crois que c'est en rapport avec la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct noeud *filsD, *filsG;
    Si quelqu'un pourrait m'aider svp
    Merci

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 498
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Voici le log complet de compilation chez moi :

    "C:\Program Files\JetBrains\CLion 2018.1.6\bin\cmake\bin\cmake.exe" --build C:\Users\Greextpgr\CLionProjects\untitled\cmake-build-debug --target untitled -- -j 2
    Scanning dependencies of target untitled
    [ 50%] Building CXX object CMakeFiles/untitled.dir/main.cpp.obj
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp:9:2: error: conflicting declaration 'typedef struct noeud noeud'
     }noeud, *ptrNoeud;
      ^~~~~
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp:7:9: note: previous declaration as 'struct noeud'
      struct noeud *filsD, *filsG;
             ^~~~~
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp: In function 'noeud* nouvNoeud(char)':
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp:13:43: error: invalid application of 'sizeof' to incomplete type 'noeud'
      newnoeud= (ptrNoeud) malloc (sizeof(noeud));
                                               ^
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp: In function 'void parcoursprefixe(ptrNoeud)':
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp:30:26: error: cannot convert 'noeud*' to 'ptrNoeud {aka noeud*}' for argument '1' to 'void parcoursprefixe(ptrNoeud)'
      parcoursprefixe(n->filsG);
                              ^
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp:7:9: note: class type 'noeud' is incomplete
      struct noeud *filsD, *filsG;
             ^~~~~
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp:31:26: error: cannot convert 'noeud*' to 'ptrNoeud {aka noeud*}' for argument '1' to 'void parcoursprefixe(ptrNoeud)'
      parcoursprefixe(n->filsD);
                              ^
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp:7:9: note: class type 'noeud' is incomplete
      struct noeud *filsD, *filsG;
             ^~~~~
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp: In function 'int main()':
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp:42:30: error: cannot convert 'noeud*' to 'ptrNoeud {aka noeud*}' for argument '1' to 'void parcoursprefixe(ptrNoeud)'
      parcoursprefixe(Arbre->filsG);
                                  ^
    C:\Users\Greextpgr\CLionProjects\untitled\main.cpp:7:9: note: class type 'noeud' is incomplete
      struct noeud *filsD, *filsG;
             ^~~~~
    mingw32-make.exe[3]: *** [CMakeFiles\untitled.dir\build.make:62: CMakeFiles/untitled.dir/main.cpp.obj] Error 1
    mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:67: CMakeFiles/untitled.dir/all] Error 2
    mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:79: CMakeFiles/untitled.dir/rule] Error 2
    mingw32-make.exe: *** [Makefile:117: untitled] Error 2
    
    Je pense que cacher un pointeur avec typedef est une mauvaise idée partant d'un coup de flemme...

    Je n'ai pas le temps de regarder ça depuis mais définir ta structure, puis faire un type sur cette struct, et enfin virer ptrNoeuf devrait rendre le code plus compréhensible.

    EDIT : j'ai regardé rapidement, j'ai remplacé la déclaration des types par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct struct_noeud {
    	char val;
    	int num;
    	struct struct_noeud *filsD, *filsG;
    };
     
    typedef struct struct_noeud noeud;
    typedef noeud* ptrNoeud;
    Ca compile....mais ça crashe à l'exécution. Je te laisse chercher pourquoi, c'est assez facile.

Discussions similaires

  1. erreur : type incompatible
    Par keibenoit dans le forum Access
    Réponses: 3
    Dernier message: 30/05/2006, 18h39
  2. erreur type string
    Par blastmanu dans le forum C++
    Réponses: 3
    Dernier message: 21/04/2006, 02h07
  3. une erreur avec les pointeur..
    Par lecyberax dans le forum C
    Réponses: 12
    Dernier message: 15/04/2006, 13h04
  4. Erreur : Type Mismatch
    Par ekinoxe dans le forum ASP
    Réponses: 1
    Dernier message: 17/02/2006, 10h51
  5. Erreur type interdit dans __property
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/01/2005, 22h45

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