2012年10月23日 星期二

error LNK2005 (把sqlite3.c加到vs2010 x64project中碰到的問題)

一開始的error是要拿掉precompile header
拿掉之後跑出

Error 1 error LNK2005: "void * __cdecl operator new(unsigned __int64)" (??2@YAPEAX_K@Z) already defined in LIBCMTD.lib(new.obj) C:\Users\Xerxes\Documents\Visual Studio 2010\Projects\test1\test1\uafxcwd.lib(afxmem.obj)
Error 2 error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPEAX@Z) already defined in LIBCMTD.lib(dbgdel.obj) C:\Users\Xerxes\Documents\Visual Studio 2010\Projects\test1\test1\uafxcwd.lib(afxmem.obj)
Error 3 error LNK2005: "void * __cdecl operator new[](unsigned __int64)" (??_U@YAPEAX_K@Z) already defined in LIBCMTD.lib(new2.obj) C:\Users\Xerxes\Documents\Visual Studio 2010\Projects\test1\test1\uafxcwd.lib(afxmem.obj)
Error 4 error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPEAX@Z) already defined in LIBCMTD.lib(delete2.obj) C:\Users\Xerxes\Documents\Visual Studio 2010\Projects\test1\test1\uafxcwd.lib(afxmem.obj)
Error 5 error LNK1169: one or more multiply defined symbols found C:\Users\Xerxes\Documents\Visual Studio 2010\Projects\test1\x64\Debug\test1.exe 1

問題在CRT和MFC library都有new delete等function, 需要先link MFC libray再link CRT


Solution:
Properties -> Linker --> Input --> Additional dependencies
加入;uafxcwd.lib;LIBCMTD.lib
順序不可以改變

參考: http://support.microsoft.com/kb/148652

2012年10月12日 星期五

使用CArray碰到error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'

http://www.cppblog.com/hlong/archive/2007/11/20/37015.html
問題大概像是文章內所述,
照他的寫法也可以compile過,
不過看不太懂為什麼要這樣改?