1 pièce(s) jointe(s)
Problème de structure partagée entre plusieurs fichiers
Bonjour tout le monde,
Je suis en train de développer un petit projet. J'ai pour cela découper mon code en module, et chaque module a son header.
Tout fonctionnait correctement, jusqu'à ce que je décide d'utiliser une structure sur plusieurs modules de mon programme.
Pour faire simple, quand je met le include de ma structure dans un des headers, le compilateur me sort une erreur de type :
Code:
error: redefinition of ...
.
Et lorsque que je l'enlève il met sort une erreur de type :
Code:
error: unknown type name
.
Je me suis concentré sur les erreurs d'un seul fichiers car les erreurs sont les mêmes pour tous les fichiers.
Voici ma structure :
Code:
1 2 3 4 5 6 7 8
|
typedef struct UserStruct
{
char* name;
char* lg;
char* prompt;
char* passwd;
}US; |
Voici les erreurs du compilateur :
Code:
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
|
/* SANS LE INCLUDE */
In file included from ../ModeLangageNaturel/ModeLangageNaturelFonctions.c:5:0:
../ModeLangageNaturel/ModeLangageNaturelFonctions.h:5:27: error: unknown type name US
void ListerFichier(char*, US*);
^
../ModeLangageNaturel/ModeLangageNaturelFonctions.h:6:22: error: unknown type name US
void ListerProcessus(US*);
^
../ModeLangageNaturel/ModeLangageNaturelFonctions.c:16:34: error: unknown type name US
void ListerFichier (char* param, US* pUser)
^
../ModeLangageNaturel/ModeLangageNaturelFonctions.c:35:23: error: unknown type name US
void ListerProcessus (US* pUser)
/* SANS LE INCLUDE */
/* AVEC LE INCLUDE */
In file included from ../ModeLangageNaturel/ModeLangageNaturelFonctions.h:3:0,
from shell.c:8:
../ModeLangageNaturel/../struct.h:1:16: error: redefinition of struct UserStruct
typedef struct UserStruct
^
In file included from ../Boot/boot.h:4:0,
from shell.c:4:
../Boot/../struct.h:1:16: note: originally defined here
typedef struct UserStruct
^
In file included from ../ModeLangageNaturel/ModeLangageNaturelFonctions.h:3:0,
from shell.c:8:
../ModeLangageNaturel/../struct.h:7:2: error: conflicting types for US
}US;
^
In file included from ../Boot/boot.h:4:0,
from shell.c:4:
../Boot/../struct.h:7:2: note: previous declaration of US was here
}US;
^
/* AVEC LE INCLUDE */ |
Je place mon include dans le header de
Code:
ModeLangageNaturelFonctions.h
sous forme
Code:
#include "../struct.h"
car il est dans un dossier juste avant.
Je fais peut être une erreur de débutant ? J'ai regardé sur internet, on parlait de déclarer la structure en globale mais j'ai toujours des erreurs. J'ai vu aussi le mot clef extern qui serai peut être la clef mais je n'arrive pas à comprendre comment s'en servir.
Voici pour résumer mon problème, (j'ai pensé qu'un schéma serai parfait). J'ai mon struct.h qui doit être accessible par tout le monde, mais je ne sais pas où le mettre pour qu'il le soit.
Pièce jointe 195472
Merci d'avance.