2

問題なくコンパイルおよびリンクされている C++ プロジェクトがあります。最近、グローバルな new および delete 演算子をオーバーライドするコードを追加したところ、プロジェクトがエラーでリンクできなくなりました。

エラー LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) は既に定義されています。

私は MS KB148652 を認識しており、それが示唆することを実行しました。Nafxcwd.lib と Libcmtd.lib を追加の依存関係に配置し、特定のライブラリを無視します。他の以前のリンカーエラーを排除するために追加する必要があったため、実際には既に存在していました。すべての .cpp ファイルの最初のインクルードが (KB148652 が示唆するように) stdafx.h であることを確認しましたが、何も機能していないようです。

誰かが別のアプローチや私が試したことのない方向性を提案できる場合は、それについて知っていただければ幸いです。前もって感謝します。

4

2 に答える 2

1

プロジェクト全体をきれいにして、最初から再構築してみてください。

于 2010-01-13T15:03:23.307 に答える
0

C++ では、オーバーロードされた演算子はクラス階層を介して継承されないため、base_class::operator new を使用して基本クラスの定義を参照せずに、各派生クラスで new と delete の個別のコピーを完全に再定義してみて
ください。

于 2010-02-23T21:39:55.957 に答える