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 :

erreur de compilation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Par défaut erreur de compilation
    Bonjour à tous.
    Je suis en train de réaliser un petit programme permettant de gérer une bibliothèque avec des listes chaînées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Catalogue : informations concernant le catalogue
    typedef struct ElCat ElCat;
    typedef ElCat* adElCat; //Le type adresse de cellule de catalogue
    struct ElCat{
      char Titre[TEXTEMAX]; //Titre identifiant le livre
      char Auteur[TEXTEMAX]; //Nom identifiant l'auteur
      int NbEx;  //>0 Nombre d'exemplaires acquis par la bibliothèque
      int NbEmp; //>=0 Nombres d'exemplaires prétés du livre
      adElCat CatSuiv; //Élément suivant du catalogue. Nil s'il n'y en a pas
    };
    De plus, j'utilise une fonction permettant de savoir si un livre est dans le catalogue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Renvoie l'adresse du livre de titre T s'il est répertorié, Nil sinon.
    adElCat RechLivre(char T[]){
      adElCat AC;
      AC=Cat;
      while (AC!=NULL && !(Egal(AC->Titre,T))){
        AC=AC->CatSuiv;
      }
      return AC;
    }
    Et voici comment j'utilise cette fonction :
    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
    //Retourne vrai si l'adhérent de nom N a déjà emprunté le livre de titre T
    bool dejaEmprunte(char N[], char T[]){
      bool emprunte;
      adElEmp AE;
      adElRep AR;
      adElCat AC;
      AR=RechAdh(N);
      AC=RechLivre(T);
      emprunte=false;
      AE=AR->LesEmp;
      while (AE!=NULL && !emprunte){
        emprunte=(AE->Emp==AC);
      }
      return emprunte;
    }
    Cependant, lors de la compilation avec gcc il y a une erreur :
    emprunt.c: Dans la fonction «dejaEmprunte» :
    emprunt.c:26: attention : assignment makes pointer from integer without a cast
    emprunt.c:27: attention : assignment makes pointer from integer without a cast

    Je crois comprendre qu'il y a une erreur de type. Pourtant AC est une adElCat et RechLivre retourne bien une adElCat...
    Quelqu'un peur-il m'aider ?
    Petite précision, la fonction est dans un fichier et l'appel à cette fonction dans un autre. Mais comme il ne me dit pas qu'il ne connait pas la fonction, je doute que ce soit ça...

    Merci.
    Sliya

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    Quelles est la structure ElRep, et quelle est la définition de RechAdh? Dans RechLivre, Cat est une variable globale?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut
    Tu dois inclure le prototype de la fonction dejaEmprunte dans le .c où tu appelles cette meme fonction.

    Ce n'est pas une erreur mais un warning, le linkage passe car le fichier objet est bien construit, ce warning te dit simplement que tu ne connais pas son type (par default une fonction est considéré en int).

    Donc inclus un .h avec le prototype dans ton emprunt.c ou ajoute juste le prototype en haut de emprunt.c

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par malves
    Tu dois inclure le prototype de la fonction dejaEmprunte dans le .c où tu appelles cette meme fonction.

    Ce n'est pas une erreur mais un warning, le linkage passe car le fichier objet est bien construit, ce warning te dit simplement que tu ne connais pas son type (par default une fonction est considéré en int).

    Donc inclus un .h avec le prototype dans ton emprunt.c ou ajoute juste le prototype en haut de emprunt.c
    Je ne crois pas que le problème soit là, du moins pas avec ce que je vois. Le mieux serait effectivement que tu postes un code compilable minimal qui reproduit le problème.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut
    C'est vrai que le warnings peut venir de plusieurs problèmes et que c'est très difficiles de répondre précisément avec le code qu'on a eu mais je suis presque prèt à parier ! C'est le warning classique de l'oublie de prototypage

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Par défaut
    Merci bien à vous tous. C'était effectivement l'absence de prototype qui causait le warning.
    Mais quelqu'un peut-il m'expliquer pourquoi est-ce qu'il connaît la fonction mais pas ce que renvoie la fonction ?
    Merci beaucoup à vous !!

  7. #7
    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 sliya
    Cependant, lors de la compilation avec gcc il y a une erreur :
    emprunt.c: Dans la fonction «dejaEmprunte» :
    emprunt.c:26: attention : assignment makes pointer from integer without a cast
    emprunt.c:27: attention : assignment makes pointer from integer without a cast
    Réduit ton code au minimum qui montre le problème (et pas 3000 autres problèmes). Il y a trop de choses inconnues dans ce que tu postes. Marque dans le source (commentaire) les lignes qui posent problème.

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

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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