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 :

Problème de type/déclaration/d'en tête


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Par défaut Problème de type/déclaration/d'en tête
    Bonjour,

    Comme le titre l'indique j'ai quelques problèmes et je ne comprend pas trop d'où ils viennent, donc plutôt que d'essayer d'expliquer je vais tout vous mettre.

    fichier.c
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    #include <stdio.h>
    #include <stdlib.h>
     
    #include "fichier.h"
    #include "graphe.h"
     
    void ouvertureFichier (void) {
        char entree [50];
        FILE* fichier=NULL;
        int nbrSommets;
     
        printf ("Quelle fichier voulez-vous ouvrir ?\n");
     
        gets (entree);//Permet de vider le tampon qui contient le \n de la dernière saisie
        gets (entree);
        char *nomFichier=entree;
        fichier=fopen(nomFichier, "a+");
     
        if (fichier!=NULL) {
            printf ("L'ouverture du fichier a été un succés.\n");
            struct table* graphe=malloc(sizeof(struct table));
            graphe->poid=-1;
            graphe=lectureFichier (fichier, graphe);
     
            printf ("Le fichier a été lu correctement.\n");
            actionsGraphe (graphe);
            close(fichier);
        }
        else {
            printf ("Il y a eut un problème lors de l'ouverture du fichier.\n");
        }
    }
     
    struct table* lectureFichier (FILE* fichier, struct table* graphe) {
        int nbrSommets, nbrAretes, sommet1, sommet2, poid, i;
     
        fscanf (fichier, "%d", &nbrSommets);
        fseek(fichier, 1, SEEK_CUR);//permet de passer à la ligne 2 pour lire le nombre correspondant au nombre d'arcs
        fscanf (fichier, "%d", &nbrAretes);
        for (i=0 ; i<nbrAretes ; i++) {
     
            fseek(fichier, 1, SEEK_CUR); //permet de passer à la ligne suivante
            fscanf (fichier, "%d %d %d", &sommet1, &sommet2, &poid); //permet de lire la ligne, et de récupperrer son contenue
     
            graphe=insererArete (graphe, sommet1, sommet2, poid);
        }
     
        graphe->nbrSommets=nbrSommets;
        graphe->nbrAretes=nbrAretes;
     
        return graphe;
    }
     
    void ecritureFichier (struct table* graphe) {
        int nbrSommets, nbrAretes;
        char tampon, *nomFichier;
        char entree [50];
        FILE* fichier;
        nbrSommets=graphe->nbrSommets;
        nbrAretes=graphe->nbrAretes;
     
     
        printf ("Quel est le nom que vous voulez donner au fichier ?\n");
        gets (entree);//Permet de vider le tampon qui contient le \n de la dernière saisie
        gets (entree);
        nomFichier=entree;
     
        fichier=fopen (nomFichier, "w+");
     
        if (fichier!=NULL) {
            fprintf (fichier, "%d", nbrSommets); //permet d'écrire le nombre de sommets du graphe
            fprintf (fichier, "\n%d", nbrAretes); //permet d'écrire le nombre d'arcs du graphe
     
            ecrireGraphe (fichier, graphe);
            printf ("Le graphe a bien été écrit dans le fichier %s.\n", nomFichier);
     
            close(fichier);
        }
    }
     
    void ecrireGraphe (FILE* fichier, struct table* graphe) {
     
        ecrireAretes (fichier, graphe->listeAretes, graphe->poid);
     
        if (graphe->listeSuivante!=NULL) {
            ecrireGraphe (fichier, graphe->listeSuivante);
        }
     
    }
     
    void ecrireAretes (FILE* fichier, struct arete* aretes, int poid) {
     
        fprintf (fichier, "\n%d %d %d", aretes->sommetDepart, aretes->sommetArrive, poid);
     
        if (aretes->areteSuivante!=NULL) {
            ecrireAretes (fichier, aretes->areteSuivante, poid);
        }
    }
    fichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdlib.h>
    #include <stdio.h>
     
    void ouvertureFichier (void);
    struct table* lectureFichier (FILE* fichier, struct table* graphe);
    void ecritureFichier (struct table* graphe);
    void ecrireGraphe (FILE* fichier, struct table* graphe);
    void ecrireAretes (FILE* fichier, struct arete* aretes, int poid);
    graphe.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
    #include <stdlib.h>
    #include <stdio.h>
     
    struct arete {
        int sommetDepart;
        int sommetArrive;
        struct arete* areteSuivante;
    };
     
    struct table {
        int nbrSommets;
        int nbrAretes;
        int poid;
        struct table* listeSuivante;
        struct arete* listeAretes;
    };
    Les erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    In file included from fichier.c:4:
    fichier.h:10: warning: ‘struct arete’ declared inside parameter list
    fichier.h:10: warning: its scope is only this definition or declaration, which is probably not what you want
    fichier.c: In function ‘ecrireGraphe’:
    fichier.c:83: warning: passing argument 2 of ‘ecrireAretes’ from incompatible pointer type
    fichier.h:10: note: expected ‘struct arete *’ but argument is of type ‘struct arete *’
    fichier.c: At top level:
    fichier.c:91: error: conflicting types for ‘ecrireAretes’
    fichier.h:10: note: previous declaration of ‘ecrireAretes’ was here
    Si dans le fichier.h je met un #include "graphe.h" ça me mets encore plus d'erreurs !


    S'il vous plait, pouvez-vous m'aider ?

    Merci d'avance.


    PS : j'aime bien la note de la ligne 6 ! :p

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    fichier.c:91: error: conflicting types for ‘ecrireAretes’
    fichier.h:10: note: previous declaration of ‘ecrireAretes’ was here

    ecrireAretes est déclaré plusieurs fois.
    Pour éviter ces erreurs, il faut utiliser les include guard qui permettent d'assurer que l'include et la déclaration ne se fait qu'une seule fois.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Par défaut
    J'ai essayé de mettre des #ifndef, #define, #endif au niveau des structures, mais ça me met encore plus d'erreurs !

    Justement, je ne comprend pas pourquoi il me dit qu'il y a plusieurs définitions de la fonction ecrireAretes, car je met le prototype dans le .h et c'est tout, je fait pareil que pour toutes les autres fonctions !

    Je ne vois pas ce qui ne lui vat pas !

  4. #4
    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
    #include "fichier.h"
    #include "graphe.h"
    "graphe.h" doit être inclus avant "fichier.h" puisque ce dernier utilise des définitions figurant dans le premier.

    Il n'y a aucune raison pour inclure <stdio.h> et <stdlib.h> dans "graphe.h"
    Il n'y a aucune raison pour inclure <stdlib.h> dans "fichier.h"

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Par défaut
    -_-'

    Ok, merci, je ferait plus gaffe la prochaine fois !

    Je sais que normalement il n'y a pas besoin de mettre les bibliothèques standarts dans les .h, mais je les ai misent au cas où ceal puisse changer quelque chose à mon problème (mais non :s).

    Encore une fois merci à toi.

    (je pense que je vais t'appeler mon sauveur :p)

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

Discussions similaires

  1. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  2. Problème de type chaîne
    Par champijulie dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 12/05/2005, 20h23
  3. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  4. [Sybase] Problème de type sous ASE
    Par Hotchotte dans le forum Sybase
    Réponses: 1
    Dernier message: 18/12/2004, 11h04
  5. Problème dans la déclaration de Winmain
    Par lvdnono dans le forum DirectX
    Réponses: 3
    Dernier message: 29/05/2004, 13h38

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