Même .h dans plusieurs .h : "error : redefinition of struct"

Résolu/Fermé
Ilioo Messages postés 42 Date d'inscription dimanche 25 décembre 2011 Statut Membre Dernière intervention 13 février 2017 - 10 déc. 2015 à 16:02
Ilioo Messages postés 42 Date d'inscription dimanche 25 décembre 2011 Statut Membre Dernière intervention 13 février 2017 - 10 déc. 2015 à 22:23
Bonjour,

Je réalise en ce moment un projet de c, divisé en deux grosses parties. Je les ai donc séparées en deux .h : gerer.h et afficher.h
Dans mon main.c :
#include "gerer.h"
#include "afficher.h"

Le problème, c'est que mes deux parties utilisent les mêmes types, qui sont rangés dans types.h, donc dans les deux j'ai #include "types.h".

Et quand je compile, mon compilateur me dit :
error : redefinition of 'struct SListe'

J'ai bien compris que le fait de #include "types.h" deux fois donnait envie à mon compilateur de le compiler deux fois, ça se comprend. Mais je n'ai pas compris comment régler le problème, je n'ai que quelques mois de C derrière moi et niveau organisation des .h et des .c je suis paumée.

C'est pourquoi je viens vers vous pour vous poser cette question : que puis-je faire pour que ce soit bien organisé et que mon compilateur l'accepte ? :'(

Merci d'avance pour vos réponses et bonne journée.

(actuellement j'utilise Windows, mais je code sur Ubuntu)

1 réponse

Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
10 déc. 2015 à 18:44
cf : https://gcc.gnu.org/onlinedocs/cpp/Conditionals.html
Vite fait :
/*types.h*/
#ifndef _TYPES_H
#define _TYPES_H

/* Contenu actuel de ton fichier */

#endif /*_TYPES_H*/


0
Ilioo Messages postés 42 Date d'inscription dimanche 25 décembre 2011 Statut Membre Dernière intervention 13 février 2017 13
10 déc. 2015 à 19:54
Merci beaucoup, je ne savais pas qu'on pouvait faire ça ! C'est top !
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
Modifié par Flachy Joe le 10/12/2015 à 21:20
De rien...

Tu dis que tu as divisé ton projet en 2 dans des fichiers .h, normalement les fichiers header ne devrait contenir que des prototypes, tes fonctions devraient être définies dans des fichiers .c

Des détails ici : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/15212-la-programmation-modulaire
0
Ilioo Messages postés 42 Date d'inscription dimanche 25 décembre 2011 Statut Membre Dernière intervention 13 février 2017 13 > Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023
10 déc. 2015 à 22:23
D'accord je vais changer ça, merci !
0