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 :

Probleme de compilation (pointeur et fonction)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut Probleme de compilation (pointeur et fonction)
    Bonjour,

    Je tente de compiler un code sans succès sous visual studio 2005 une fonction de recherche :
    la fonction doit retourner l'adresse à laquelle l'element cherché doit se trouver s'il existe (les elements sont classés par ordre alphabétique)

    Voici le code (je n'ai laissé que le 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include "stdafx.h"
    #include "stdlib.h"
    #include "string.h"
    #include "stdio.h"
     
    //Structures
    struct GAGNE
    {
    	char *nom;
    	int pts;
    	GAGNE *psuiv;
    	};
     
    //Programme principal	
    	void main(){
     
    		GAGNE *pdeb = NULL;
    		GAGNE ** super;
     
    		char ZL[31];
    		int connu;
    		char replu;
    //prototype de la fonction
    		GAGNE **CHERCHE(GAGNE **,char [], int*);
     
    		printf("NOM?");
    		gets(ZL);
     
    		while(*ZL !='*')
    		{
     
     
    		printf("B ou F");
    		replu = getchar();
     
    		super = CHERCHE(&pdeb,ZL,&connu);
    		if(connu)
    		{
    			printf("connu");
     
    		}else
    			{
    			printf("inconnu");
     
    		}
     
    		printf("NOM?");
    		gets(ZL);
    		}
    	}
     
     
    //Déclaration de la fonction
    GAGNE ** CHERCHE(GAGNE **sp,char ZL[], int * rep)
    	{
    		int cc=1;
     		for(; *sp!=NULL&&(cc=strcmp(ZL , *sp->nom))>0; sp = &(*sp->psuiv));
     
    		if(cc==0)
    		*rep=1;
    		else
    		*rep=0;
    		return(sp);
    	}
    Les erreurs sont les suivantes (liées au pointeur) :

    z:\documents\cours\algo_c\test.cpp(57) : error C2227: la partie gauche de '->nom' doit pointer vers un type class/struct/union/générique
    le type est 'GAGNE **'
    z:\documents\cours\algo_c\test.cpp(57) : error C2227: la partie gauche de '->psuiv' doit pointer vers un type class/struct/union/générique
    le type est 'GAGNE **'
    Si quelqu'un a une piste ...

    Merci encore

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct GAGNE GAGNE ;
    ....
     for(; *sp!=NULL&&(cc=strcmp(ZL , (*sp)->nom))>0; sp = &((*sp)->psuiv));
    ....

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut Merci
    Merci pour ta réponse, il manquait effectivement un bon paquet de parenthèses

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par deadbone Voir le message
    <...>
    Voici le code (je n'ai laissé que le code
    Ce code est incomplet, donc intestable...
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : D:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:1:20: stdafx.h: No such file or directory
    main.c:11: error: syntax error before "GAGNE"
    main.c:11: warning: no semicolon at end of struct or union
    main.c:15: warning: function declaration isn't a prototype
    main.c:15: warning: return type of 'main' is not `int'
    main.c: In function `main':
    main.c:17: error: `GAGNE' undeclared (first use in this function)
    main.c:17: error: (Each undeclared identifier is reported only once
    main.c:17: error: for each function it appears in.)
    main.c:17: error: `pdeb' undeclared (first use in this function)
    main.c:18: error: `super' undeclared (first use in this function)
    main.c:24: warning: implicit declaration of function `CHERCHE'
    main.c:24: error: syntax error before ',' token
    main.c: At top level:
    main.c:54: error: syntax error before '*' token
    main.c:54: error: syntax error before '*' token
    main.c:55: warning: return type defaults to `int'
    main.c:55: warning: function declaration isn't a prototype
    main.c:55: error: conflicting types for 'CHERCHE'
    main.c:24: error: previous implicit declaration of 'CHERCHE' was here
    main.c: In function `CHERCHE':
    main.c:57: error: `sp' undeclared (first use in this function)
    main.c:57: error: `ZL' undeclared (first use in this function)
    main.c:60: error: `rep' undeclared (first use in this function)
    Process terminated with status 1 (0 minutes, 2 seconds)
    15 errors, 6 warnings
    J'ai corrigé, simplifié et sécurisé ton code. Pose des questions si tu ne comprends pas.
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    /* Ajouter :
    http://delahaye.emmanuel.free.fr/clib/ed/src/purge.c
    http://delahaye.emmanuel.free.fr/clib/ed/src/fclean.c
    .h dans :
    http://delahaye.emmanuel.free.fr/clib/ */
     
    #include "ed/inc/fclean.h"
    #include "ed/inc/purge.h"
     
    #ifdef __cplusplus
    #error This source file is not C++ but rather C. Please use a C-compiler
    #endif
     
    #include <string.h>
    #include <stdio.h>
     
    //Structures
    struct GAGNE
    {
       char *nom;
       int pts;
       struct GAGNE *psuiv;
    };
     
    //Déclaration de la fonction
    struct GAGNE *CHERCHE (struct GAGNE *sp, char ZL[])
    {
       int cc = 1;
       while (sp != NULL && (cc = strcmp (ZL, sp->nom)) > 0)
       {
          sp = sp->psuiv;
       }
     
       if (cc != 0)
       {
          sp = NULL;
       }
       return sp;
    }
     
    //Programme principal
    int main (void)
    {
       char ZL[31];
       struct GAGNE *pdeb = NULL;
       do
       {
          printf ("NOM ? (* pour quitter) ");
          fgets (ZL, sizeof ZL, stdin);
          fclean (ZL, stdin);
     
          if (*ZL != '*')
          {
             printf ("B ou F");
             int replu = getchar ();
             if (replu != '\n')
             {
                purge ();
             }
     
             {
                struct GAGNE *super = CHERCHE (pdeb, ZL);
                if (super != NULL)
                {
                   printf ("connu\n");
                }
                else
                {
                   printf ("inconnu\n");
                }
             }
          }
       }
       while (*ZL != '*');
       return 0;
    }

  5. #5
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct GAGNE
    {
    	char *nom;
    	int pts;
    	GAGNE *psuiv;
    	};
    c'est pas juste

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut je vois pas
    Bonjour,

    Je ne vois pas ce qui est faux dans la structure... J'ai du louper quelque chose...

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    - Il manque un typedef.
    - L'erreur est sur *p->... qui doit être (*p)->...
    Voir mon post #2 .

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut je suis un peu perdu
    Pour Diogene :

    J'ai modifié mon code avec ce que tu as ecrit dans le 2eme message de ce fil et j'ai reussi à compiler sous MS visual 2005.

    Je ne comprends donc pas ton dernier message sur le *p (je dois pas être bien reveillé)

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/09/2011, 09h27
  2. Réponses: 6
    Dernier message: 16/01/2011, 15h33
  3. [Pointeur de fonction membre] Erreur de compilation
    Par PtitFrancesco dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2010, 15h59
  4. Probleme de compilation : fonction manquante.
    Par Valkirion dans le forum C++
    Réponses: 5
    Dernier message: 07/03/2007, 22h30
  5. Réponses: 6
    Dernier message: 08/12/2006, 14h59

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