begin process at 2010 02 10 03:26:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Problème d'Enum


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème d'Enum

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

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales