2009-10-14 5 views
5

Я использую __declspec (DllImport/экспорт) на отладочной версии нового, как, например:«оператор нового»: переопределение, различные связи (с использованием _dllspec на переопределена нового оператора)

#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 

Это вызывает у меня get

ошибка C2375: 'operator new': redefinition; различные связи.

Почему это и как вы можете это исправить? Это единственный проект, который я собираю прямо сейчас.

ответ

0

Если у вас есть два прототипа перегрузки нового оператора, вы должны экспортировать оба. Hopefulyl - это ваша проблема.

2

Сама среда выполнения C++ предоставляет operator new, который не помечен как DECLSPECCORE - отсюда «разная связь», оригинал не был импортирован из другого модуля. Если вы намерены переопределить operator new, он должен иметь ту же связь, что и раньше.

0

Ваш код говорит, что вы хотите, чтобы оператор «C++» новый был экспортирован как функция, вызываемая извне библиотеки DLL. Предполагая, что это возможно (возможно, нет): Вы уверены, что это то, что вы хотите сделать?

0

Возможное решение заключается в перемещении нового оператора delete в его собственное пространство имен. все типы в этом пространстве имен должны использовать оператор new и delete этого пространства имен.