不知道我在这里做错了什么,但是说我有:
foo。
class foo
{
public:
int Get10(std::wstring);
};
foo.cpp
int foo::Get10(std::wstring dir)
{
return 10;
};
我将它编译为一个库,如果我将该库与相关的头文件(foo.h)一起包含在另一个项目中,并尝试调用foo的实例:
foo f;
f.Get10(L"ABC");
我得到一个链接错误说:
错误1错误LNK2005: "public: __thiscall .std:: _Container_base12:: ~ _Container_base12(空白)"(??1_Container_base12@std@@QAE@XZ)已经定义在foo.lib(foo.obj) C:foomsvcprtd.lib(msvcp100 .dll) footest
知道为什么会这样吗?
错误1错误LNK2005: "public: __thiscall .std:: _Container_base12:: ~ _Container_base12(空白)"(??1_Container_base12@std@@QAE@XZ)已经在foo.lib(foo.obj)中定义C: foo msvcprtd.lib (MSVCP100D.dll)脚
从我所看到的,这个错误消息意味着你试图包含MSVC运行时库两次。这可能是由于编译foo.lib
的运行时库选项:"多线程(/MT)"和测试项目的选项:"多线程DLL (/MD)"的结果。
检查两个项目的"Project Properties" ==> "C/c++ " ==> "Code Generation"下的Runtime选项,并确保它们在两个项目中是相同的。
您是否在任何。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