cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006
-
27 déc. 2006 à 17:40
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006
-
28 déc. 2006 à 09:41
Bonsoir à tous,
Voilà j'ai un petit problème. J'ai fais un couple .c/.h de fonctions génériques que je vais sans doute réutiliser dans plusieurs programmes. Néanmoins, ces fonctions retournent un type enum que j'ai crée qui s'appelle enCodeRetour (qui me permet de détecter le type d'erreur que me donne ma fonction). Néanmoins, je vais réutiliser cet enum dans mon programme et donc fatalement je vais ajouter des codes erreur qui ne sont pas définis à l'avance. Donc mon enum est définie dans mon programme, et non pas dans le couple .h. J'aurai voulu savoir si il y avait une solution pour éviter d'inclure le typedef enum dans mon .h sans qu'il me fasse une erreur du type 'type non définie' ou 'type déclaré deux fois'. Ci-dessous un exemple, pour que vous compreniez mieux :
fichier1.c intègre mon programme est l'appel à mes fonctions de fichier2.h
fichier2.c est inclu dans mon projet
-------------------------------
En gros, pour utiliser les fonctions du fichier2.h, le compilateur me dit qu'il faut que je définisse mon enum enCodeRetour (donc dans fichier2.h). Mais le problème est que mon enum est définie dans fichier1.h et que si je le définie deux fois, le compilateur va gueuler. Mais si je le définie dans fichier2.h, je ne pourrai pas ajouer de valeurs dans fichier1.h (si j'ai bien compris). Et dans l'absolu je ne sais pas les codes erreurs que je rajouterai, donc je ne peux les définir à l'avance. Il y aurai bien la possibilité de créer deux enum, mais après ça serait le bazar par rapport à mon switch case qui gère les erreurs. Quelqu'un aurait-il une solution ? Existe-il une solution pour que deux enum soient compatible entre eux ? Est-il possible de faire passer mon enum de fichier1.h dans fichier2.h ?
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 28 déc. 2006 à 09:41
En fait mon problème c'était que je ne voulais pas toucher à fichier2.h et comme mon enum pouvait changer en fonction du programme que je faisais (en fonction du programme, il n'y a pas le même nombre d'erreurs), la solution la plus simple est de faire mon enum dans un troisième fichier .h inclue dans fichier2.h. En effet, je ne peux pas créer mon enum dans fichier1.h car fichier2.h est appelé avant et ça crée un problème au niveau des entêtes de fonctions ET je ne veux pas modifier fichier2.h à chaque fois que je fais un nouveau programme. La seule solution consiste donc à ajouter un troisième .h en l'appelant dans le deuxième.
pepsidrinker
Messages postés151Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention15 avril 2009 27 déc. 2006 à 17:50
Je ne suis pas sur d'avoir tout bien compris, mais si je peut me permettre, tu n'a pas a redefinir l'enum 2 fois.
Une fois l'enum defini dans ton .h, ne fais que inclure ce ".h" dans lekelle lenum est definit et tu pourra lutiliser.
Pepsidrinker
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 27 déc. 2006 à 18:01
Mon problème est que je fais appel à des fonctions qui ne sont pas dans fichier1.cpp mais dans fichier2.cpp. Or, pour suivre ton exemple, c'est comme si j'avais:
fichier2.cpp
Le problème est que j'inclue mon couple fichier2 dans fichier1 mais que l'enum est créé dans fichier1. Et donc du coup le compilateur me sort une erreur comme quoi l'enum est pas créé. Exactement il dit:
[C++ Erreur] generik.h(17): E2238 Déclaration multiple pour 'enCodeRetour'
[C++ Erreur] generik.h(15): E2344 Déclaration plus récente de 'enCodeRetour'
MuPuF
Messages postés536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 août 2008 27 déc. 2006 à 18:56
hello, laisse tomber les enums, retourne un int.
Et pour que ce soit facile à utiliser, met des defines dans ton programme, comme ça, c'est générique et adaptable, jamais compris l'interet des énums de toute facon ...
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 27 déc. 2006 à 19:41
Il faut simplement que tu mettes l'enum dans generic.h au lieu de fichier 1.
tu l'auras aussi puisque tu fais l'inclusion à ralonge (generic.h) dans fichier1
De plus fichier 1 n'est pas encadré de #ifndef ect...
On peut voir les enum comme des :
static const int OK = 0;
static const int ERR1 = 1;
static const int ERR2 = 2;