'operator new':重新定义,不同的链接(在重新定义的新运算符上使用_dllspec)

时间:2009-10-14 17:57:57

标签: c++ dll linker extern

我在新的调试版本上使用__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:'operator new':   重新定义;不同的联系。

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

4 个答案:

答案 0 :(得分:2)

C ++运行时本身提供operator new,未标记为DECLSPECCORE - 因此“不同的链接”,原始文件未从其他模块导入。如果您打算覆盖operator new,它应该具有与之前相同的链接。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您有两个重载新运算符的两个原型,则必须导出两个。 Hopefulyl这是你的问题。

答案 3 :(得分:0)

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