5

私は __declspec(dllimport/export) を new のデバッグ バージョンで使用しています。

#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

4 に答える 4

2

C++ ランタイム自体は、operator newとしてマークされていない を提供しますDECLSPECCORE。したがって、「異なるリンケージ」であり、オリジナルは別のモジュールからインポートされたものではありません。をオーバーライドする場合operator newは、以前と同じリンケージを持つ必要があります。

于 2009-10-14T18:10:30.160 に答える
0

あなたのコードは、C++ の "operator new" を DLL の外部から呼び出し可能な関数としてエクスポートすることを望んでいると言っています。それが可能であると仮定すると(おそらく不可能です):本当にそれがあなたのやりたいことですか?

于 2009-10-14T18:21:17.697 に答える
0

new 演算子をオーバーロードする 2 つのプロトタイプがある場合は、両方をエクスポートする必要があります。それがあなたの問題であることを願っています。

于 2009-10-14T18:38:55.033 に答える