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 :

Conflicting type plusieurs import


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Conflicting type plusieurs import
    Bonjour, j'ai une erreur en important mon fichier .h dans deux fichiers différents :

    TypeFourmi.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    typedef struct{
    short pvMax;
    short pa;
    short speed;
    short id;
    }TypeFourmi;
     
     
    TypeFourmi* createTypeFourmi(short pvMax,short pa,short speed);
    void saveTypeFourmis(TypeFourmi* f);
    TypeFourmi** loadTypeFourmis();
    short getTypeLastId();
    short getNbTypeFourmis();

    mon code c equivalent ou j'importe mon h :

    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
     
    #ifndef _typef
    #define _typef
    #include "TypeFourmi.h"
    #endif
    #include <fcntl.h>
    #include <sys/stat.h>
    #include <stdlib.h>
    #include <dirent.h>
     
    short id;
    short nbTypeFourmis;
    TypeFourmi* createTypeFourmi(short pvMax,short pa,short speed)
    {
    TypeFourmi*  type = malloc(sizeof(TypeFourmi));
     
    ///
    return type;
    }
     
    short getTypeLastId()
    {
    return id;
    }
     
     
    void saveTypeFourmis(TypeFourmi* f)
    {
    int fd;
    /////
     
      close(fd);
     
    }
     
    short getNbTypeFourmis()
    {
    return nbTypeFourmis;
    }
     
     
     
    TypeFourmi** loadTypeFourmis()
     {
     
    ////
        closedir(d);
      }
     
    }
    Avec ces deux fichiers mon programme fonctionne seulement l'ajout du 3éme fichier pose un soucis :

    Fourmiliere.h


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef _typef
    #define _typef
    #include "TypeFourmi.h"
    #endif
    typedef struct {
    TypeFourmi **typeFourmis;
    float   *probaSpawn;
    short nbTypeFourmis;
    }fourmiliere;
     
    fourmiliere* creerFourmilier(short nbTypefourmis,TypeFourmi **typeFourmis);
    float addTypeFourmis(fourmiliere* f ,short id,float percent);
    float checkPercent(fourmiliere* f );
    Si je ne renseigne pas en import mon fichier TypeFourmi.h, cela créer une erreur de structure inconnue. Sinon j'obtiens un jolie conflicting type

    /home/c/Bureau/projet/Info/TypeFourmi.h|6|error: conflicting types for ‘TypeFourmi’|
    /home/c/Bureau/projet/Info/TypeFourmi.h|6|note: previous declaration of ‘TypeFourmi’ was here|
    /home/c/Bureau/projet/Info/TypeFourmi.h|9|error: conflicting types for ‘createTypeFourmi’|
    /home/c/Bureau/projet/Info/TypeFourmi.h|6|note: previous declaration of ‘TypeFourmi’ was here|
    /home/c/Bureau/projet/Info/TypeFourmi.h|10|error: conflicting types for ‘saveTypeFourmis’|
    /home/c/Bureau/projet/Info/TypeFourmi.h|6|note: previous declaration of ‘TypeFourmi’ was here|
    /home/c/Bureau/projet/Info/TypeFourmi.h|11|error: conflicting types for ‘loadTypeFourmis’|

    Merci d'avance , ce n'est pas la premiere fois que j'ai ce genre de message, j'ai réussi la plus part du temps a résoudre les conflits sans jamais trop comprendre comment

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonsoir.

    Il te manque les directives d'inclusion conditionnelle, de la forme #ifndef / #ifdef dans tes fichiers d'en-tête.

    En gros, dans chaque fichier d'en-tête (les .h), il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef _NOM_UNIQUE_PAR_FICHIER_
    #define _NOM_UNIQUE_PAR_FICHIER_
    au début, et à la fin du fichier (et nulle part ailleurs, sauf si tu sais ce que tu fais).

    La raison est que quand tu inclues un fichier (avec #include <fichier.h>), tu vas avoir accès aux fonctions et structures déclarées par fichier.h, car celui-ci est copié dans le fichier appelant.
    Mais si tu inclues plusieurs fois fichier.h, il sera recopié plusieurs fois, et tes fonctions seront donc déclarées plusieurs fois aussi.
    Et comme le compilateur n'aime pas voir deux fonctions avec le même nom, il te dit qu'il y a un conflit (même si les deux fonctions sont en fait la même).
    Du coup, avec ces directives, on dit littéralement « Si ce fichier n'a été inclus nulle part, je définis un nom _NOM_UNIQUE_PAR_FICHIER_ et je fournis le contenu du fichier. Si le fichier a déjà été inclus, le nom _NOM_UNIQUE_PAR_FICHIER_ est déjà défini, donc je ne copie pas le contenu du fichier d'en-tête. »
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Juin 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Collégien
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Merci bien ! , je savais bien que le header été interprété plusieurs fois (donc duplication des methode, functions) , mais j'utilisais mal mais ifndef .

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

Discussions similaires

  1. pb de conflicting types for
    Par Fahmi06 dans le forum C
    Réponses: 1
    Dernier message: 26/12/2008, 14h26
  2. Conflicting types dans fonction déclarée
    Par Spikeuh dans le forum C
    Réponses: 8
    Dernier message: 22/06/2008, 17h49
  3. Type mismatch: 'Imports'
    Par Teufboy dans le forum ASP
    Réponses: 4
    Dernier message: 12/11/2006, 06h42
  4. conflicting types
    Par semaj_james dans le forum C
    Réponses: 3
    Dernier message: 28/11/2005, 12h10
  5. [MYSQL] conversion de type sur import de script
    Par sebos63 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/08/2003, 10h00

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