1>nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已經在 LIBCMT.lib(new.obj) 中定義
1>nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已經在 LIBCMT.lib(delete.obj) 中定義
1>nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已經在 LIBCMT.lib(new2.obj) 中定義
1>nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已經在 LIBCMT.lib(delete2.obj) 中定義
1>d:\XXXXXXXX\Test.exe : fatal error LNK1169: 找到一個或多個多重定義的符號
解決方法: 參見 http://support.microsoft.com/kb/148652/zh-cn
原因在於nafxcw和LIBCMT沖突了, 解決方法就是先link nafxcw.lib即可。
具體操作方法: 工程屬性 "連接器"->"輸入"->"附加依賴項"里面輸入"nafxcw.lib",這樣VC2008(VC2010)編譯時會先鏈接nafxcw.lib,問題就解決了。
補充一句:這是在使用靜態MFC庫時, 常常出現的錯誤。 一般要么是通過改為使用動態MFC庫,要么通過上面的方法來解決。