Rechercher : dans
Par :

Même structure dans plusieurs fichiers en C

Dernière réponse le 1 mai 2009 à 11:09:20 sonia, le 30 avr 2009 à 21:27:43 
 Signaler ce message aux modérateurs

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.

Configuration: Linux Suse
Firefox 2.0.0.6

Meilleures réponses pour « même structure dans plusieurs fichiers en C » dans :
Entrées/sorties : Les flux en C++ VoirEntrées/sorties : les flux en C++ 1. Ouvrir un fichier en lecture 1.1 Ouverture du fichier "donnees.txt" en lecture 1.2 Lecture du contenu de "donnees.txt" 2. Ouvrir un fichier en écriture 2.1 Ouverture du fichier "donnees.txt" en...
Fichier Hosts ou Lhosts : modification impossible VoirMessages d'erreur : Ces messages d'erreurs apparaissent lorsque vous essayez de modifier le fichier Hosts (ou Lmhosts) dans Microsoft Windows Vista depuis un compte administrateur : Accès à C:\Windows\System32\drivers\etc\ hosts refuséou...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Les structures en langage C VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les structures en langage C++ VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Langage C - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...

1

tatou_38, le 30 avr 2009 à 23:04:58

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



tatou_38
Angers

Répondre à tatou_38

2

 sonia, le 1 mai 2009 à 11:09:20

Merci bcp tatou_38, j'avais écrit dans .h :
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?

Répondre à sonia