Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème d'Enum [ Divers / Général ] (BaptX)

mercredi 27 décembre 2006 à 17:40:34 | Problème d'Enum

BaptX

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.h

#include "fichier2.h"
typedef enum enCodeRetour {
OK,
} enCodeRetour;


fichier2.h

enCodeRetour function1();
enCodeRetour function2();

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 ?


mercredi 27 décembre 2006 à 17:50:31 | Re : Problème d'Enum

pepsidrinker


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

exemple :
(ficher1.h):
enum Rien {BOB,GEORGE};


( fichier1.cpp)
#include "fichier1.h"
int main()
{
Rien monEnum;
nomEnum = BOB;
}


voila, jespere t'avoir aider.

mercredi 27 décembre 2006 à 18:01:24 | Re : Problème d'Enum

BaptX

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

Rien haha (int hoho)
{
    // mon programme
    return haha;
}

fichier2.h

Rien haha (int hoho);

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'

mercredi 27 décembre 2006 à 18:05:27 | Re : Problème d'Enum

BaptX

Voici mes sources exactes, ca vous parlera ptète mieux:
fichier1.h

#include <Dialogs.hpp>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <dir.h>
#include "C:\Documents and Settings\ABM\Bureau\Baptiste\Convertisseur\Fonctions génériques\generik.h"
#define MAX_SIZE 200
//---------------------------------------------------------------------------
typedef enum enCodeRetour {
                        OK,
                        ER_fopen,
                        ER_copyfile,
                        ER_genopenf,
                        ER_cliopenf,
                        ER_samelib,
                        ER_noequal,
                        ER_nolib,
                        ER_char,
                        ER_nogui,
                        ER_nullstruct,
                        ER_nbarg,
                        ER_modif,
                        ER_choix,
                        ER_write,
                        ER_genempty,
                        ER_cliempty,
                        ER_client,
                        ER_gen13,
                        ER_genchar,
                } enCodeRetour;


fichier generik.h

//---------------------------------------------------------------------------
#ifndef generikH
#define generikH
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dir.h>
#include <time.h>
#include <conio.h>
#define MAX_SIZE 200
//---------------------------------------------------------------------------
// enum struct
//---------------------------------------------------------------------------
enCodeRetour enCrCopyfile (unsigned char *aucSource, unsigned char *aucDest,
                           unsigned char *aucErreur);
enCodeRetour enCrangefiles (unsigned char *aucPath, unsigned char *aucName,
                            unsigned char *aucExt, unsigned char *aucErreur);
enCodeRetour enCrIngecrypt (unsigned char *aucPathExe, unsigned char *aucPath,
                            unsigned char *aucName, unsigned char *aucExt);
//---------------------------------------------------------------------------
#endif

mercredi 27 décembre 2006 à 18:07:11 | Re : Problème d'Enum

pepsidrinker


envois la source des ton prog au complet svp
Pepsidrinker

mercredi 27 décembre 2006 à 18:56:00 | Re : Problème d'Enum

MuPuF

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 ...


/*
MuPuF®

mercredi 27 décembre 2006 à 19:41:58 | Re : Problème d'Enum

yann_lo_san

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;


mercredi 27 décembre 2006 à 19:44:06 | Re : Problème d'Enum

yann_lo_san

Pour mupuf : une enum est plutot encapsulée dans une struct, ou elle sera vu comme un type intégrée a la struct, impossible à faire avec des #define.


jeudi 28 décembre 2006 à 09:41:17 | Re : Problème d'Enum

BaptX

Réponse acceptée !
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.



Cette discussion est classé dans : type, enum, définie, fichier2, encoderetour


Répondre à ce message

Sujets en rapport avec ce message

Comment récupérer une valeur définie par __int64 ? [ par Weedy_59 ] Voici mon problème, je voulais acquérir la taille d'un fichier de + 4Go donc j'ai demandé une aide car a cause du type 'unsigned long' j'étais limité sérialisation d'un bool ou un type enum [ par iznogoud ] Bonjour,J'ai un petit problème lorsque j'utilise ma fonction serialize. Je suis incapble de rentrer des types bool ou des types que j'ai créer. Je sai Nombre aléatoire de type Double [ par BRAUKRIS ] Impossible de génère un nombre aléatoire à virgule.J?ai utilisé la fonction rand mais elle me renvoie toujours un nombre entier.Comment doit-je faire Type de fenêtre + Gestion des touches + Réduction de la fenêtre [ par CyberP ] 1.Lorsque l'on créé un élément pour son programme, comme une barre de status ou une zone de texte éditable, on utilise une fonction avec le type d'élé Récupération de varaiables dans un fichier txt [ par jujunio ] Mon pb est le suivant :Je n'arrive pas à récupérer les valeurs de variables déclarées dans un fichier txt.voici le fichier .txt dont je veux récupérer récupération de variables dans un fichier .txt [ par jujunio ] Voici mon pb. Je voudrais récupérer des valeurs de variables qui sont dans un fichier .txt et je ne sais pas du tout comment faire?voici le fichier .t template [ par dam1234 ] G un probleme avec une methode de classe declaree en template. J'aurai besoin de savoir comment est ce que l'on fait pour connaitre quel a été le type Gestion d'accès par carte à puce [ par Midikits ] Bonjour à tous!J'ais un projet de gestion d'accès par carte à puce à developper avec une base de données sous access et un programme en c++ pour faire type de donnée inconnu [ par jeffise57 ] dans une fonction developper par une autre personne j'ai un type char** trucmuche, cette variable est un buffer qui doit recevoir le résultat qu'est c aidez moi svp [ par asnow ] Q'un aurait-il la gentillesse de me traduire ce code, en algorithme. merci d'avance.int i=0;int x=random(10);int y=random(10);int type_pos=random(2);i


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,264 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.