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 :

duplication de définition


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut duplication de définition
    Bonjour,
    j'utilise deux bibliothèques static qui definisse chacune des "objets" de même nom. A savoir une classe TOTO pour la bibliothèque A et une enum TOTO pour la bibliothèque B. Cela me pose problème à la compile. Comme on est en C++ y a les espaces de nomages pour gérer ce genre de problème, le problème c'est que je n'ai pas la main sur ces deux bibliothèque et que leurs développeur on omis d'y définir des espaces de nomages.
    Pour l'instant je gérai la chose en séparant l'utilisation de l'une et de l'autre dans des fichiers séparés.
    Mais là, j'ai un cas ou je suis obligé d'utiliser les deux bibliothèques dans une seul fichier.
    Je vois bien deux solutions pour éviter cela mais elle ne me plaisent pas:
    1) Modifier mon design, créer un sorte d'objet tampon qui ne sert à rien sauf de résoudre le problème.

    2) Séparer le code de mon objet dans deux fichiers un qui inclut la lib A et ne definissant que les methodes utilisant A et l'autre fichier la même chose avec la lib B. Mais cela viole les règles de dev de ma boite et apporte de la confusion -> difficulté à la première approche pour ceux qui passeront après moi. En plus les deux fichier aboutiront à un même .o donc je ne suis pas sur que ça marche.

    Avez vous d'autres solutions à me proposer ?

  2. #2
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    Salut,

    je ne vois pas d'autre solutions que celles que tu as ennoncé sauf peut etre changer de librairie pour en utiliser une mieux codée avec des espaces de nommages ou des noms moins generiques.

    peux tu redefinir le enum TOTO dans tes propres fichier plutot que d'inclure celui de ta librairie ?

  3. #3
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    Citation Envoyé par xxiemeciel
    peux tu redefinir le enum TOTO dans tes propres fichier plutot que d'inclure celui de ta librairie ?
    Ben je n'utilise pas que l'enum dans la lib j'utilise aussi des fonctions, donc pas possible.

    Merci d'avoir pris le temps de me répondre tout de même.

  4. #4
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Peut-être une idée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #define TOTO TOTO_A
    #include "A.h"
    #undef TOTO
    #define TOTO TOTO_B
    #include "B.h"
    #undef TOTO
     
    ...
     
    TOTO_A * Toto = new TOTO_A();

  5. #5
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    ca pourrait etre une solution mais je ne crois pas qu'il soit possible de faire un #undef sur quelquechose qui n'a pas ete definie par #define.

    et une classe et un enum ne sont pas defini par #define

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    En créent des enveloppes proxy qui changent les noms peut-être.

    Sinon, contacter ceux qui te fournissent ces bibliothèques et leur expliquer gentillement que finalement tu ne pairas pas la licence car leur produit est inutilisable avec l'autre produit. Et que donc tu passes à la concurrence.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Citation Envoyé par xxiemeciel
    une classe et un enum ne sont pas defini par #define
    Bien sûr, et je n'ai jamais dit une chose pareille. Ce que mon code faisait, c'est juste remplacer le nom de l'ENUM (par exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define TOTO TOTO_B
    enum TOTO {Val1, Val2, Val3};
    #undef TOTO
    est équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enum TOTO_B {Val1, Val2, Val3};
    Et c'est le but recherché (ne plus avoir de conflit avec ce garnement de TOTO)

Discussions similaires

  1. Message 'Duplicate index entry'
    Par Poulou dans le forum Administration
    Réponses: 13
    Dernier message: 04/05/2004, 14h57
  2. [jsp] Error #: 482 : duplicate definition of class
    Par antigone dans le forum JBuilder
    Réponses: 4
    Dernier message: 24/07/2003, 10h18
  3. [Sybase] Définition des symboles
    Par SoaB dans le forum Sybase
    Réponses: 5
    Dernier message: 19/03/2003, 23h06
  4. Définition de "Métalangage"
    Par No dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 19/07/2002, 14h05

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