Même structure dans plusieurs fichiers en C
Résolu
sonia
-
sonia -
sonia -
Bonjour,
Comment faire pour définir une structure utilisable dans différents fichiers sources?
J'ai écrit dans structure.h :
struct s_point { float abscisse; float ordonnee;};
typedef struct s_point points;
Dans les fichiers .c je n'ai pas oublié d'écrire :
#include "structure.h"
Mais la compilation n'aboutit pas :
structure.h:1: error: redefinition of ‘struct s_point’
structure.h:2: error: redefinition of typedef ‘points’
et je ne comprends pas les messages d'erreurs.
D'où peut venir le problème?
Merci d'avance pour vos réponses.
Comment faire pour définir une structure utilisable dans différents fichiers sources?
J'ai écrit dans structure.h :
struct s_point { float abscisse; float ordonnee;};
typedef struct s_point points;
Dans les fichiers .c je n'ai pas oublié d'écrire :
#include "structure.h"
Mais la compilation n'aboutit pas :
structure.h:1: error: redefinition of ‘struct s_point’
structure.h:2: error: redefinition of typedef ‘points’
et je ne comprends pas les messages d'erreurs.
D'où peut venir le problème?
Merci d'avance pour vos réponses.
A voir également:
- Même structure dans plusieurs fichiers en C
- Renommer plusieurs fichiers en même temps - Guide
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Fichiers epub - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Explorateur de fichiers - Guide
1 réponse
struct s_point { float abscisse; float ordonnee;};
Cette ligne déclare la structure s_point. Comme tu le mets dans ton fichier .h, l'objet s_point va être déclaré dans tous les sources .c qui incluent ton fichier .h. D'où un problème à l'édition des liens qui trouve plusieurs objets de même nom !!!
Dans un fichier .h, tu définit des types de données,
Sans un source .c tu déclare des objets
Si tu as besoin de te référer à un même objet dans plusieurs sources .c, alors il faut le déclarer dans un seul de ces sources, et en extern dans les autres. Avec des #define tu peux t'arranger pour mettre la déclaration de l'objet dans ton fichier .h :
typedef struct {
float abscisse;
float ordonnee;
} tPoint;
#ifdef FICHIER_PRINCIPAL
typedef tPoint points;
#else
extern typedef tPoint points;
#else
Cette ligne déclare la structure s_point. Comme tu le mets dans ton fichier .h, l'objet s_point va être déclaré dans tous les sources .c qui incluent ton fichier .h. D'où un problème à l'édition des liens qui trouve plusieurs objets de même nom !!!
Dans un fichier .h, tu définit des types de données,
Sans un source .c tu déclare des objets
Si tu as besoin de te référer à un même objet dans plusieurs sources .c, alors il faut le déclarer dans un seul de ces sources, et en extern dans les autres. Avec des #define tu peux t'arranger pour mettre la déclaration de l'objet dans ton fichier .h :
typedef struct {
float abscisse;
float ordonnee;
} tPoint;
#ifdef FICHIER_PRINCIPAL
typedef tPoint points;
#else
extern typedef tPoint points;
#else
extern struct s_point { float abscisse; float ordonnee;};
typedef struct s_point points;
mais j avais le message suivant :
balayage.h:2: warning: useless keyword or type name in empty declaration
Finalement en écrivant simplement ce que tu m as dit, à savoir :
typedef struct {
float abscisse;
float ordonnee;
} points;
plus de message de warning, je crois que c est parce que ma définition était redondante, c est ca?