我在新的调试版本上使用__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': 重新定义;不同的联系。
为什么会这样,你怎么解决它?这是我现在正在编译的唯一项目。
答案 0 :(得分:2)
C ++运行时本身提供operator new
,未标记为DECLSPECCORE
- 因此“不同的链接”,原始文件未从其他模块导入。如果您打算覆盖operator new
,它应该具有与之前相同的链接。
答案 1 :(得分:0)
您的代码表示您希望将C ++的“operator new”导出为可从DLL外部调用的函数。假设甚至可能(可能不是):你确定这是你想做的吗?
答案 2 :(得分:0)
如果您有两个重载新运算符的两个原型,则必须导出两个。 Hopefulyl这是你的问题。
答案 3 :(得分:0)
一种可能的解决方案是将new和delete运算符移动到它自己的命名空间。 该命名空间中的所有类型都应该使用该命名空间的new和delete运算符。