LNK2005(已定义)

时间:2011-11-17 16:54:41

标签: c++ lnk2005

我知道你已经看到21728517人要求帮助这个但是在搜索和阅读这个之后我真的无法想出这一个。我知道这个错误,我以前见过它,但是,这一次,我似乎无法绕过它。

我也试过这个checklist

所以,错误:

Error   25  error LNK2005: "void __cdecl checkStatus(unsigned int &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool)" (?checkStatus@@YAXAAIV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z) already defined in DollarRecognizer.obj C:\Users\Rui Teixeira\Desktop\Current\Tese\SVN\TIFEE_Empty\TIFEE_Empty\main.obj TIFEE_Empty

Error   26  error LNK2005: "void __cdecl depth2rgb(unsigned short const *,unsigned short *,char *,int,int)" (?depth2rgb@@YAXPBGPAGPADHH@Z) already defined in DollarRecognizer.obj  C:\Users\Rui Teixeira\Desktop\Current\Tese\SVN\TIFEE_Empty\TIFEE_Empty\main.obj TIFEE_Empty

Error   27  error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > __cdecl explode(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char)" (?explode@@YA?AV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@D@Z) already defined in DollarRecognizer.obj    C:\Users\Rui Teixeira\Desktop\Current\Tese\SVN\TIFEE_Empty\TIFEE_Empty\main.obj TIFEE_Empty

所以,问题是,这些是在“misc.h”中使用正确的#ifndef #define #endif定义的函数。他们没有在其他地方定义,但我仍然得到LNK2005的死亡。我做错了什么?

提前致谢。

1 个答案:

答案 0 :(得分:22)

定义misc.cpp中的函数,而不是misc.h中的函数。

问题可能是多个CPP文件中的#include misc.h造成的。标题保护可防止标题在同一翻译单元中被多次包含,但每个CPP文件(通常)是一个单独的翻译单元。因此,这些函数最终定义两次 - 每次翻译单元一次。