LNK2005 すでに ~.obj で定義…
このエラーは,複数のソースファイルに同じ関数などが定義されている場合に発生します.
別の表現をすると,リンク対象の obj や lib に同じ定義が含まれているということです.
次の様な関数のエラーは,プロジェクトの設定に問題があることがあります.
nafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) はすでに LIBCD.lib(new.obj) で定義されています
https://dev.mish.work/wordpress/?s=lnk2005
他に,自前のコードでヘッダファイルに関数の実体を定義した場合にも発生します.
その場合はソースファイルに移すか,inline 関数として定義します.
base64.hxx
以下は個人的なもので,ちょっと異なる使い方で発生した時の対応です.
以前,ソースファイルに定義していたテーブルをヘッダファイルに.
struct CL_function { LPCTSTR Lower ; int FType ; } ; CL_function CL_fnc_tbl[] = { _T("atan2") , ATAN2 , // ... _T(" ") , FERROR , _T("\0") , FERROR , } ;
--------------------構成: pf_20 - Win32 Debug-------------------- コンパイル中... ComPrj01.cpp コードを生成中... コンパイル中... ComUse02.cpp pf_20.cpp pf_20Dlg.cpp コードを生成中... リンク中... ComUse02.obj : error LNK2005: "struct CL_function * CL_fnc_tbl" (?CL_fnc_tbl@@3PAUCL_function@@A) はすでに ComPrj01.obj で定義されています pf_20.obj : error LNK2005: "struct CL_function * CL_fnc_tbl" (?CL_fnc_tbl@@3PAUCL_function@@A) はすでに ComPrj01.obj で定義されています pf_20Dlg.obj : error LNK2005: "struct CL_function * CL_fnc_tbl" (?CL_fnc_tbl@@3PAUCL_function@@A) はすでに ComPrj01.obj で定義されています pf_20.exe - エラー 3、警告 0
次の様に static を付けて対応したが,ヘッダには static を書いてはいけない 様な記述が多い.
static CL_function CL_fnc_tbl[] = {
// ...
} ;