Erreur de compilation : header hell

Fermé
tatatatataa Messages postés 4 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 17 janvier 2009 - 16 janv. 2009 à 15:34
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 17 janv. 2009 à 11:07
Bonjour,

Pour un projet de C, j'ai plusieurs fichiers que je compile, et j'ai l'erreur suivante :

loadPPM.c:7:error : redefinition of 'loader'
loadPPM.c:7:error : rprevious definition of 'loader' was here

Mon loadPPM.h ressemble à ça :

#ifndef LOADPPM_H
#define LOADPPM_H

#include "loadPPM.c"

/////////////// LoadPPM ///////////////

void loader(char*, Calque*);

#endif


et le loadPPM.c :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "loadPPM.h"
// d'autres .h

void loader(char* nom, Calque* Clq) {

// toute la fonction

}

Et je comprends vraiment pas le probleme ?!

Est-ce quelqu'un aurait la solution ?

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 janv. 2009 à 15:37
Salut,
Enlève l'include loadPPM.c du fichier .h, ça devrait aller mieux. Et d'une manière générale, jamais de .c dans un .h.
Cdlt
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 janv. 2009 à 16:47
Une fonction doit être déclaré dans chaque unité (fichier compilé) où elle est utilisé mais ne doit être définie qu'une seule fois pour l'ensemble du programme.
Donc en règle générale, jamais de définition de fonction dans un .h
0
tatatatataa Messages postés 4 Date d'inscription mardi 13 janvier 2009 Statut Membre Dernière intervention 17 janvier 2009
17 janv. 2009 à 10:11
Merci pour votre aide. Mais est ce que ça voudrait dire qu'il n'y a pas de prototype de fonction dans un .h ??
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
17 janv. 2009 à 11:07
Si dans le .h, il y a le prototype de la fonction. Dans le .c, tu fais appels aux .h pour connaître le prototype de la fonction, et tu définis la fonction (tu écris son corps).
0