2009-10-14 8 views
5

estoy usando __declspec (dllimport/exportación) en una versión de depuración de nuevo como tal:'operador new': nueva definición, diferente de ligamiento (usando _dllspec el nuevo operador redefinido)

#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 

Esto me está causando a obtener

error C2375: 'operador nuevo': redefinición; diferente vinculación.

¿Por qué es esto y cómo puede solucionarlo? Este es el único proyecto que estoy compilando en este momento.

Respuesta

0

Si tiene dos dos prototipos de sobrecarga del nuevo operador, debe exportar ambos. Hopefulyl ese es tu problema.

2

El tiempo de ejecución C++ en sí proporciona una operator new, que no está marcado como DECLSPECCORE - por lo tanto "enlace diferente", el original no fue importado de otro módulo. Si tiene la intención de anular operator new, debe tener el mismo enlace que antes.

0

Su código indica que desea exportar el "operador nuevo" de C++ como una función que se puede llamar desde fuera de la DLL. Suponiendo que sea posible (probablemente no): ¿Estás seguro de que eso es lo que quieres hacer?

0

Una posible solución es mover el operador nuevo y eliminarlo a su propio espacio de nombres. todos los tipos en ese espacio de nombres deben usar el operador nuevo y eliminar de ese espacio de nombres.

Cuestiones relacionadas