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 :

Comment utiliser une structure dans un autre fichier .c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    programmeur sur cnc
    Inscrit en
    Août 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : programmeur sur cnc
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2023
    Messages : 1
    Par défaut Comment utiliser une structure dans un autre fichier .c
    Bonjour,

    J'ai un fichier main.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
    #include <stdio.h>
    #include <stdbool.h>
    #include "map.h"
    #include "hero.h"
     
    int main()
    {
        int map[9][9] = {
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0}};
     
        Hero hero;
        hero.potion = 5;
        hero.pv = 1;
     
        aff_map(map, &hero);
     
        return 0;
    }
    _________________________________
    Puis j'ai un hero.h et hero.c :

    hero.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef HERO_H
    #define HERO_H
     
    typedef struct Hero
    {
        int potion;
        int pv;
    } Hero;
     
    void aff_pv(Hero *hero);
    #endif
    hero.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "hero.h"
    #include <stdio.h>
     
    void aff_pv(Hero *hero)
    {
        printf("pv:%d\n", hero->pv);
        printf("potion:%d\n", hero->potion);
    }
    __________________________________

    Et enfin un map.h et map.c :

    map.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef MAP_H
    #define MAP_H
     
    void aff_map(int map[9][9], Hero *hero);
     
    #endif
    map.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
    #include "map.h"
    #include "hero.h"
    #include <stdio.h>
    
    void aff_map(int map[9][9], Hero *hero)
    {
    
        aff_pv(&hero);
    
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                printf("%d", map[i][j]);
            }
            printf("\n");
        }
    }
    J'ai souligné dans le fichier map.c la fonction que je cherche a utiliser dans la fonction aff_map().

    Je n'arrive pas a faire ceci avec une structure, pourtant si je cherche a faire la même chose pour la fonction aff_map() dans le fichier hero.c, il me suffit de lui inclure le fichier map.h et de mettre ma fonction dans la fonction aff_pv() du fichier hero.c et ça fonctionne !

    Voici le message d'erreur en console lors de la compilation avec gcc :

    PS C:\Users\shamb\MonProg> gcc -Wall main.c map.c -o monCode.exe
    In file included from main.c:4:
    map.h:4:29: error: unknown type name 'Hero'
        4 | void aff_map(int map[9][9], Hero *hero);
          |                             ^~~~
    main.c: In function 'main':
    main.c:24:5: warning: implicit declaration of function 'aff_map' [-Wimplicit-function-declaration]
       24 |     aff_map(map, &hero);
          |     ^~~~~~~
    In file included from map.c:1:
    map.h:4:29: error: unknown type name 'Hero'
        4 | void aff_map(int map[9][9], Hero *hero);
          |                             ^~~~
    map.c: In function 'aff_map':
    map.c:8:12: warning: passing argument 1 of 'aff_pv' from incompatible pointer type [-Wincompatible-pointer-types]
        8 |     aff_pv(&hero);
          |            ^~~~~
          |            |
          |            Hero **
    In file included from map.c:2:
    hero.h:10:19: note: expected 'Hero *' but argument is of type 'Hero **'
       10 | void aff_pv(Hero *hero);
          |             ~~~~~~^~~~
    
    Quelqu'un a t il une solution pour utiliser une fonction comportant une structure d'un fichier externe, dans une autre fonction d'un autre fichier externe ?

    Remarque : même sans passer par une fonction, le fait de vouloir utiliser une structure ailleurs que dans le main.c donne aussi des erreurs lors de la compilation.

    Merci par avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 773
    Par défaut
    C'est normal lorsque tu appelles aff_pv(&hero); hero est déjà 1 pointeur.

    Le compilateur te le dit :
    map.c:8:12: warning: passing argument 1 of 'aff_pv' from incompatible pointer type
    et
    note: expected 'Hero *' but argument is of type 'Hero **'
    Sinon, tes includes sont mal fait

    Tu dois faire 1 #include "hero.h" dans map.h et ainsi 1) c'est logique map dépend de héro et 2) évite à chaque fois 1 double #include.

    Et pour finir mets ton code sous balise code (bouton # croisillon)

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/11/2016, 19h47
  2. Réponses: 6
    Dernier message: 11/07/2015, 21h51
  3. Utilisation de structure dans d'autres fichiers
    Par Soward dans le forum Débuter
    Réponses: 2
    Dernier message: 04/04/2010, 12h12
  4. Utilisation d'une classe dans un autre fichier
    Par melotron dans le forum Général Python
    Réponses: 1
    Dernier message: 09/07/2006, 13h11
  5. Shell - Récupérer une variable dans un autre fichier
    Par claralavraie dans le forum Linux
    Réponses: 9
    Dernier message: 11/01/2006, 16h25

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