2010-01-11 87 views
2

我有一個編譯和鏈接沒有問題的C++項目。最近,我們添加了代碼來覆蓋全局新的和刪除操作符,現在項目無法鏈接到錯誤:錯誤LNK2005:已經定義了「void * __cdecl operator new(unsigned int)」(?? 2 @ YAPAXI @ Z)。我花了很多時間用Google搜索這個問題,嘗試任何建議以及搜索這個論壇。我也知道MS KB148652,並已完成它的建議 - 我已將Nafxcwd.lib和Libcmtd.lib放入其他依賴項和忽略特定的Libary列表中。其實他們已經在那裏,因爲我不得不添加它們來消除以前的鏈接器錯誤。我確定所有.cpp文件中的第一個包含stdafx.h(如KB148652所示),但似乎沒有任何效果。如果任何人都可以提出另一種方法或方向,我還沒有嘗試,我會很高興知道這一點。提前致謝。LNK2005嘗試覆蓋全局新運算符和刪除運算符時出錯

+1

你的'新'替換定義內聯?這可能是你的問題。 – Permaquid

+0

在命令行上覆蓋運算符。這會告訴你在哪裏試圖重寫它們。 –

+0

請確保使用相同的調用約定(__cdecl在你的情況) - 確保你的清潔真的很乾淨 - 建立測試代碼到你的基本包,測試全局新的和刪除替換 - 閱讀調用約定 – reechard

回答

1

您是否清理了整個項目並試圖從頭重建它?

在C++
+0

修復了我的問題。謝謝! –

0

,重載操作不通過類層次繼承的,因此嘗試將其完全重新定義的新的單獨副本和在每個派生類刪除,而無需使用BASE_CLASS參照基類的定義::運算新,
我希望我能幫到你