我有一个调试条件来管理我拥有的内存
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 Delete(void* address);
#define FUN_NEW new(__FILE__, __LINE__)
#define FUN_DELETE delete
这存在于Memory.h中并在 Memory.cpp 中实现。Memory.h 定义为:
#ifdef MEMORY_EXPORT
#define DECL_MEMORY __declspec(dllexport)
#else
#define DECL_MEMORY __declspec(dllimport)
#endif
class DECL_MEMORY Memory : public Singleton<Memory>
{
现在,我有SoundStuff.h和SoundStuff.cpp,它们位于一个单独的项目中,也以与上述类似的方式转换为 dll。所属项目对SoundStuff
所属项目具有项目依赖关系Memory
。在 SoundStuff.cpp 的实现中FUN_DELETE
,来自Memory.h的 被调用。它是通过单独项目中的函数调用的,但无论如何都会调用它。这会导致链接器错误。
错误 LNK2019:未解析的外部符号“void __cdecl operator delete(void *,char const *,int)”(??3@YAXPAXPBDH@Z) 在函数 __unwindfunclet$?Init@SoundStuff@@AAEXXZ$1 SoundStuff.obj 中引用
为什么会这样,我该如何解决?