这个博客Cubic建议尝试四件事,然后或多或少地寻求的帮助
- 重建,检查
- 选中"运行库",只有一个项目
- 检查入口点,检查子系统:CONSULE
- 检查强制包含的.lib文件,我看不到#pragma注释(lib,…)
- 关于在链接器选项中打开/VERBOSE,我看不到该选项
我会发布一些代码,但这是一个LNK错误;它没有提供太多信息。
- LNK2005:"类std::vector,类std:::分配器>,类std::分配器,类std::分配器>>,类std::分配器,类std::分配器>list1"(?list1@@3V$vector@V$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$allocator@V$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@@2@@std@@A)已在msproject.obj中定义
- LNK2005:"类std::vector,类std:::分配器>,类std::分配器,类std::分配器>>,类std::分配器,类std::分配器>list1"(?list1@@3V$vector@V$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$allocator@V$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@@2@@std@@A)已在msproject.obj中定义
我看到它是关于msproject中已经定义的向量的东西——我确保向量有不同的名称。这是标题为# include <vector>
的东西吗;我试着把一些#includes注释掉,但还是一样。
您似乎不止一次定义list1
。(顺便说一句,这个名字表明它应该是std::list
,但这超出了问题的范围)
你有吗
std::vector<std::string> list1;
在头文件中?这个标题包含在多个翻译单元中吗?
如果你想要一个全局,你需要在标题中使用extern
:
extern std::vector<std::string> list1;
并在单个实现文件中移动定义。
您已经多次定义list1。可能是将它放在一个头文件中,然后将其包含在多个cpp文件中。这就是你应该怎么做
// in header file
extern std:vector<whatever> list1;
// in one cpp file
std:vector<whatever> list1;
你的知识差距在于,你不知道/不理解如何在拥有多个源文件的程序中声明和定义全局变量。任何一本像样的C++入门书都应该涵盖这一点。