C++ 库中已定义标准库,导致链接器错误

C++ 库中已定义标准库,导致链接器错误,c++,linker,lnk2005,C++,Linker,Lnk2005,不确定我做错了什么,但说我有: foo.h class foo { public: int Get10(std::wstring); }; foo.cpp int foo::Get10(std::wstring dir) { return 10; }; 我将其编译为一个lib,如果我将该lib与相关头(foo.h)一起包含在另一个项目中,并尝试调用foo的实例: foo f; f.Get10(L"ABC"); 我收到一个链接器错误,它说: 错误1错误LNK2005:“公共:\此调用

不确定我做错了什么,但说我有:

foo.h

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

int foo::Get10(std::wstring dir)
{
   return 10;
};
我将其编译为一个lib,如果我将该lib与相关头(foo.h)一起包含在另一个项目中,并尝试调用foo的实例:

foo f;
f.Get10(L"ABC");
我收到一个链接器错误,它说:

错误1错误LNK2005:“公共:\此调用 std::_Container_base12::~_Container_base12(无效)” (??1个集装箱)_base12@std@@QAE@XZ)已在中定义 foo.lib(foo.obj)C:\foo\msvcprtd.lib(MSVCP100D.dll)footest


知道为什么会发生这种情况吗?

您是否将foo.h包含在任何.h文件中?您可能需要添加标题保护,以确保每个文件定义类的次数不超过一次:

#ifndef FOO_H_
#define FOO_H_

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

#endif  // FOO_H_
另见:

错误1错误LNK2005:“公共:\此调用 std::_Container_base12::~_Container_base12(无效)” (??1个集装箱)_base12@std@@QAE@XZ)已在foo.lib(foo.obj)中定义 C:\foo\msvcprtd.lib(MSVCP100D.dll)footest


从我所看到的,这个错误消息意味着您试图包含MSVC运行库两次。这可能是由于使用运行时库选项“多线程(/MT)”编译
foo.lib
的结果,以及使用选项“多线程DLL(/MD)”编译测试项目的结果


检查两个项目的“项目属性”==>“C/C++”==>“代码生成”下的运行时选项,并确保两个项目的运行时选项相同。

是否尝试添加分号在类定义之后?是的,那在源文件中,哈哈,我的不好,因为我没有把它放在这里。你能包括你正在使用的所有函数的整个源代码和命令行吗?“使用运行时库选项:多线程(/MT)和测试项目选项:例如多线程DLL(/MD)。”宾果,就是这样(来这里发布)我以前经历过同样的问题,所以我知道当你发布错误时发生了什么:)这个问题是:男人有时候C++的错误信息会让我头脑模糊。这就是为什么我只使用C的主要代码库和C++来做组件。@ KSMIN我有这些设置和错误。但是如何在VisualStudioGUI中更改它们呢?