2009-10-14 6 views
5

J'utilise __declspec (dllimport/export) sur une version de débogage de nouveau en tant que tel:'opérateur new': redéfinition, différents liens (avec _dllspec sur nouvel opérateur redéfini)

#ifdef _DEBUG 
DECLSPECCORE extern void* operator new(unsigned int size, const char* file, int line); 
extern void* operator new[](unsigned int size, const char* file, int line); 
extern void operator delete(void* address, const char* file, int line); 
extern void operator delete[](void* address, const char* file, int line); 
extern void Delete(void* address); 

#define LUDO_NEW new(__FILE__, __LINE__) 
#define LUDO_DELETE delete 

#endif 

Cela me cause de get

erreur C2375: 'opérateur nouveau': redéfinition; lien différent.

Pourquoi est-ce et comment pouvez-vous résoudre ce problème? C'est le seul projet que je compile en ce moment.

Répondre

0

Si vous avez deux prototypes de surcharge du nouvel opérateur, vous devez exporter les deux. Hopefulyl c'est votre problème.

2

L'exécution de C++ elle-même fournit un operator new, qui n'est pas marqué comme DECLSPECCORE - d'où «lien différent», l'original n'a pas été importé à partir d'un autre module. Si vous avez l'intention de surcharger operator new, il devrait avoir le même lien qu'avant.

0

Votre code dit que vous voulez que l'opérateur "new new" de C++ soit exporté en tant que fonction appelable depuis l'extérieur de la DLL. En supposant que c'est même possible (probablement pas): Êtes-vous sûr que c'est ce que vous voulez faire?

0

Une solution possible consiste à déplacer l'opérateur new et delete dans son propre espace de noms. tous les types dans cet espace de noms doivent utiliser les opérateurs new et delete de cet espace de noms.