IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Probleme de redefinition de type


Sujet :

C++

  1. #1
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut Probleme de redefinition de type
    Salut tout le monde !!

    J'ai un petit probleme je veux choisir un de deux fichiers headers à inclure lors de l'execution parce que si je les inclus en meme temps j'aurais une erreur lors la compilation de redefinition de variable.

    En fait le probleme se pose de cette facon: J'ai 2 classes AffichageConsole et AffichageGraphique. Au debut l'utilisateur choisit le type d'affichage et selon son choix j'inclut le header approprié .

    La solution se trouve dans les macros c'est bien ca ??

  2. #2
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    hein?? Mais à l'execution tu n'a plus de fichier header ou cpp tu n'a plus que le exe. Tu veux dire à la compilation? Dans ce cas tu peux utiliser les macros dans le code effectivement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // #define GUI // Enlever les comments pour affiche l'interface graphique
     
    #ifdef GUI
        #include "AffichageGraphique.h"
     
    #else
        #include "AffichageConsole.h"
     
    #endif
    Sinon il faut implémenter ça si tu veux que l'utilisateur choisisse à l'exécution.

  3. #3
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    oui je sais ce n'est pas logique ce que je dis mais c'est comme ca mais et je crois qu'il n'y a pas de solution .

    La solution telle que tu l'a ecrite ne permet pas de choisir le mode graphique à l'execution !!

    En fait je crois qu'il faut que refait la conception de mes classes d'affichages pour que je puisse les inclure en meme temps !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    enum etatAffichage
    {
    	caseFerme,
    	caseInterrogation,
    	caseIlYaBombe,
    	caseBlanc
     
    };
     
    class AffichageGraphique
    {
    public:
    	//methodes
    private:
    //mon etat 
     
    };
    le enum est aussi declaré dans la classe AffichageConsole, si je les inclu toutes les 2 j'aurais une erreur de compilation de redefinition du type enum

    Que faire !!!

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Si tu pense que c'est faisable, c'est que tu n'a vraiment pas compris le principe de la compilation. Mais heureusement, ce n'est pas une maladie grave, on en guéri très bien : http://www.developpez.com/c/megacours/x2392.html (par exemple).

  5. #5
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Non !! J'ai pas dis que c'est faisable au contraire c'est pour ca que j'ai dit qu'il faut revoir la conception de mes classes
    Merci comme meme pour le lien !!!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Points : 38
    Points
    38
    Par défaut
    dans le sens de revoir la conception de tes classes tu peux faire une classe mère (abstraite?) de laquelle va hériterer tes classes console et graphiques et gérer le choix soit par argument de la ligne de commande soit par une boite de dialogue qui demande le mode (graphiquie/console) en fonction du choix tu crée l'objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    class Affichage {
      public:
         //methode et proprieté de l'interface
         virtual Methode1() = 0;
    }
     
    class AffichageGraphique : public Affichage {
      public:
        virtual Methode1() {
    //   .......
        }
    }
     
    class AffichageConsole : public Affichage {
      public:
        virtual Methode1() {
    //   .......
        }
    }
     
    Affichage* pAffichage;
     
    int main(int argc, char *argv[]) {
      if((*argc[0])=='g') pAffichage = new AffichageGraphique();
      else pAffichage = new AffichageConsole();
      .
      .
      .
    }

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par mehdi_tn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    enum etatAffichage
    {
    	caseFerme,
    	caseInterrogation,
    	caseIlYaBombe,
    	caseBlanc
     
    };
    le enum est aussi declaré dans la classe AffichageConsole, si je les inclu toutes les 2 j'aurais une erreur de compilation de redefinition du type enum
    Qu'est-ce qui t'empêche de définier cette enum dans un .h unique qui sera inclus dans tes deux .h. Les include guards de ce .h unique empêcherons l'inclusion multiple.

  8. #8
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Et hop je change le topic

    merci deja d'avoir repondu !!!

    Je pense que le projet est mal concu à la base. Parce que si un jour je veux ajouter un autre mode d'affichage je dois ajouter une autre instance de la nouvelle classe qui supporte le nouveau mode d'affichage, ce qui n'est pas bien du tout. L'idee de Rely n'est pas mal et elle ressemble au design pattern "Abstract Factory" je vais converger vers cette solution et commencer à re-structurer les classes

    Je vous mes au courant si cette solution fonctionne bien dans ce cas ou non !!!

  9. #9
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    En fait ca n'a rien à voir avec le design pattern que j'ai signalé, mais plutot utiliser des classes abstraites et instancier selon le mode comme l'a dit Rely. Un probleme banal de conception

    Ca marche 8)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de redefinition de type
    Par drcd dans le forum C++
    Réponses: 10
    Dernier message: 21/06/2006, 00h17
  2. Probleme avec les "input type="image" "
    Par khokho dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 26/03/2006, 17h12
  3. Probleme avec champ de type LONG
    Par Youby dans le forum Oracle
    Réponses: 11
    Dernier message: 17/01/2006, 16h26
  4. Probleme Alter - Changer le type d'un champ
    Par Yphon dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/09/2005, 13h58
  5. [LG]Problême Variable dynamique de types différents
    Par pierrOPSG dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2004, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo