2011-12-14 41 views
4

不知道我做错了什么在这里,但说我有:标准库已经在LIB定义,导致连接器错误

//foo.h

class foo 
{ 
public: 
int Get10(std::wstring); 
}; 

//foo.cpp 

int foo::Get10(std::wstring dir) 
{ 
    return 10; 
}; 

我编译成lib下,如果我包括LIB与相关的头(foo.h中)和atttempt沿着另一个项目调用foo的实例:

foo f; 
f.Get10(L"ABC"); 

我得到一个链接错误说:

错误1错误LNK2005: “公共:__thiscall 的std :: _ Container_base12 ::〜_Container_base12(无效)” (?? 1_Container_base12 @ @@ STD QAE @ XZ)在 foo.lib已经定义(foo.obj )C:\ foo \ msvcprtd.lib(MSVCP100D.dll)最低版本

任何想法为什么会发生这种情况?

+0

您是否尝试在类定义之后添加分号`;`? – 2011-12-14 01:13:45

+0

是的,在那里的源文件哈哈,我的坏离开它,我放在这里。 – tweetypi 2011-12-14 01:20:37

回答

18

“错误1错误LNK2005:”市民:__thiscall的std ::已经在foo.lib(foo.obj)中定义的_Container_base12 ::〜_Container_base12(void)“(?? 1_Container_base12 @ std @@ QAE @ XZ)C:\ foo \ msvcprtd.lib(MSVCP100D.dll)footest”

从我可以看到,这个错误信息意味着你正在尝试包含两次MSVC运行时库。这可能是由于使用运行时库选项编译foo.lib的结果:多线程(/ MT)和带有选项的测试项目:例如,多线程DLL(/ MD)。

检查两个项目的项目属性/ C/C++ /代码生成下的运行时选项,并确保它们对于两个项目都是相同的。

0

你是否在任何.h文件中包含foo.h?您可能需要添加页眉警卫,以确保你没有定义每个文件一旦超过类的更多:

#ifndef FOO_H_ 
#define FOO_H_ 

class foo 
{ 
public: 
    int Get10(std::wstring); 
} 

#endif // FOO_H_ 

参见:http://en.wikipedia.org/wiki/Include_guard

+0

我已经这样做了...... – tweetypi 2011-12-14 01:06:57

相关问题