5

我在 new 的调试版本上使用 __declspec(dllimport/export) :

#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

这导致我得到

错误 C2375:“新操作员”:重新定义;不同的联动。

为什么会这样,你怎么能解决它?这是我现在正在编译的唯一项目。

4

4 回答 4

2

C++ 运行时本身提供了一个operator new,它没有被标记为DECLSPECCORE-- 因此是“不同的链接”,原来的不是从另一个模块导入的。如果您打算覆盖operator new,它应该具有与以前相同的链接。

于 2009-10-14T18:10:30.160 回答
1

一个可能的解决方案是将 new 和 delete 运算符移动到它自己的命名空间。该命名空间中的所有类型都应该使用该命名空间的 new 和 delete 运算符。

于 2014-02-25T21:27:42.520 回答
0

您的代码是说您希望将 C++ 的“operator new”导出为可从 DLL 外部调用的函数。假设这是可能的(可能不是):你确定那是你想做的吗?

于 2009-10-14T18:21:17.697 回答
0

如果您有两个重载 new 运算符的两个原型,则必须将两者都导出。Hopefulyl 那是你的问题。

于 2009-10-14T18:38:55.033 回答