2007年8月21日

error LNK2005:

nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) はすでに libcpmtd.lib(delop.obj) で定義されています
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int,int,char const *,int)" (??2@YAPAXIHPBDH@Z) はすでに LIBCMTD.lib(dbgnew.obj) で定義されています


VC6.0でMFCプロジェクトでたまに出るリンカーエラー。
C ランタイム ライブラリを MFC ライブラリより先にリンクしたときでるらしい。

「プロジェクト」→「設定」→「リンク」から、カテゴリを「インプット」にして、「オブジェクト/ライブラリモジュール」に「Nafxcwd.lib Libcmtd.lib」、無視するライブラリに「Nafxcwd.lib Libcmtd.lib」とやれば解決。Nafxcwd.lib Libcmtd.libはDebug用のライブラリだから、リリース時には、「Nafxcw.lib Libcmt.lib」にしないとダメ。


この辺が参考になります。
http://frog.raindrop.jp/knowledge/archives/000503.html
http://isobe.exblog.jp/3506901/
http://support.microsoft.com/default.aspx?scid=kb;ja;148652

人気blogランキングへ にほんブログ村 IT技術ブログへ ブログランキング ドット ネット

2007年8月2日

テンプレートの発見

テンプレート関数って


#include <stdio.h>

template <typename _T> void hoge(_T a)
{
printf("hoge template %d \n", a);
}


void hoge(double a)
{
printf("hoge double %f \n", a);
}

int main()
{
int i = 1;
double d = 2.0;
char c = 3;
hoge(i);
hoge(d);
hoge(c);

return 0;
}

実行結果

hoge template 1
hoge double 2.000000
hoge template 3

って具合に使えるみたい。
テンプレートの関数 VS. 型指定してる関数では、型指定してる関数がオーバーロードされちゃうんだ。

人気blogランキングへ にほんブログ村 IT技術ブログへ ブログランキング ドット ネット