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