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 :

Problème redéfinition 'new'


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Par défaut Problème redéfinition 'new'
    Bonjour,
    J'ai un soucis. Je ne pense pas que ce soit compliqué, mais il y a un détail que j'ai dû zapper. J'explique :
    Dans un programme, je dois utiliser un API fourni par un fournisseur. On me donne une DLL et le .lib associé ainsi qu'un dossier include avec tous les fichiers à inclure. J'ai un fichier api.h qui se charge d'inclure les autres fichiers. J'inclus donc le fichier api.h dans mon projet.
    Or, dans un autre fichier (inclus via api.h), l'opérateur new est redéfini :

    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
    #ifdef __cplusplus
    #if(!defined(_MFC_VER) || (_MFC_VER < 0x400)) 
    #ifndef __PLACEMENT_NEW_INLINE
    /*----- placement operator new ----------------------------------------
     * This operator new places the object allocated at the passed address.
     * 10 Sep 93 BV  See C++ ARM page 279.
     *---------------------------------------------------------------------*/
    #define __PLACEMENT_NEW_INLINE
    #ifdef WIN32
    #pragma warning(disable:4291)  /* get rid of the Microsoft heave */
    #endif
    
    #if !defined(aix) && !defined(linux)   /* otherwise, new compiler complains about declaration conflict */
    inline void* operator new (size_t, void *p) {
       return p;
    }
    #endif 
    
    #endif /* __PLACEMENT_NEW_INLINE */
    #endif /* _MFC_VER */
    #endif /* __cplusplus */
    Du coup, dans mon programme, lorsque j'appelle new pour n'importe quelle raison, le compilateur me répond gentillement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le corps a déja été défini pour la fonction 'operator new(unsigned int, void *) throw()'
    Je me retrouve donc coincé. Que puis-je faire ?
    N'y a-t'il pas une instruction qui permet de n'utiliser le #include api.h que pour certaines parties du code ?
    J'ai effectué des recherches sur le forum et sur google, mais je n'ai pas trouvé de résultats, surement du fait que mes mots clés n'étaient pas pertinents.

    Bref, merci de votre aide par avance !
    Cordialement, Jérôme

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    vu le fichier, tu devrais pouvoir contourner la redéfinition du new en ajoutant #define __PLACEMENT_NEW_INLINE avant d'inclure api.h
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre actif Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Par défaut
    J'en reviens pas... J'ai essayé tous les #define qui me paraissaient logique :
    #define __cplusplus
    #define __WIN__
    #define WIN32

    Mais j'ai même pas essayé celui-là. Honte à moi ! Merci de ton aide. A priori ca fonctionne. Si jamais j'ai un autre soucis, je posterai quelque chose ici.
    Merci encore

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

Discussions similaires

  1. Problème redéfinition toString
    Par julien.63 dans le forum Langage
    Réponses: 3
    Dernier message: 16/12/2007, 11h46
  2. Problême de new[]
    Par Plomeg dans le forum C++
    Réponses: 8
    Dernier message: 23/11/2007, 16h56
  3. Problème Bouton -> new Panel
    Par LesToulousains dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 10/04/2007, 12h50
  4. Problème création New Java Class
    Par karl3i dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 09/01/2007, 08h17
  5. Problème avec new
    Par Azharis dans le forum C++
    Réponses: 18
    Dernier message: 27/04/2005, 17h45

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