C++ 讨厌的链接错误
我正在使用VisualStudio2010,我相信我有一个项目设置问题。我有一个头文件,其中包含一些声明: 定义.hC++ 讨厌的链接错误,c++,visual-studio-2010,C++,Visual Studio 2010,我正在使用VisualStudio2010,我相信我有一个项目设置问题。我有一个头文件,其中包含一些声明: 定义.h #include <string> struct myStruct { std::string x[4]; std::string y[8]; }; void InitializeStructData(); extern myStruct data[12]; 当我有两个#include“definitions.h”语句时,我会收到链接错误: E
#include <string>
struct myStruct
{
std::string x[4];
std::string y[8];
};
void InitializeStructData();
extern myStruct data[12];
当我有两个#include“definitions.h”
语句时,我会收到链接错误:
Error 1 error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * Definitions"
Error 2 error LNK1169: one or more multiply defined symbols found
错误1错误LNK2005:“类标准::基本字符串*定义”
错误2错误LNK1169:找到一个或多个乘法定义符号
您的问题缺少重要部分
标题中有一个
std::string*Definitions
,您忘记使用extern
。您的问题缺少重要部分
标题中有一个std::string*Definitions
,您忘记使用extern
。您的代码(.h文件)是否在其中:
为了防止您多次定义它,如果您将它包含在多个位置?您的代码(.h文件)是否在其中:
为了防止您多次定义它,如果您在多个位置包含它?我不确定初始化是否需要该函数,我在原始代码中没有该函数。这只是我试图提出自己的解决方案。你的测试用例显然不是一字不差的;错误与代码不匹配,并且您在
definitions.cpp
中有一个输入错误。请制作一个适当的测试用例来演示这个问题。对不起,我只是想让这个问题比我的实际代码更清楚、更小。我会解决的。您创建了一个最小的测试用例,这是正确的,但可惜它不是一个完整的测试用例。:)我不确定初始化是否需要这个函数,我在原始代码中没有这个函数。这只是我试图提出自己的解决方案。你的测试用例显然不是一字不差的;错误与代码不匹配,并且您在definitions.cpp
中有一个输入错误。请制作一个适当的测试用例来演示这个问题。对不起,我只是想让这个问题比我的实际代码更清楚、更小。我会解决的。您创建了一个最小的测试用例,这是正确的,但可惜它不是一个完整的测试用例。:)这不会防止跨多个翻译单元的多个定义出现问题。仅在单个TU中使用编译器重新定义(尽管建议使用标题保护;这并不是此问题的解决方案)。这不会防止跨多个翻译单元的多个定义出现问题。只有在一个TU内重新定义编译器(尽管建议使用标题保护;这根本不是解决此问题的方法)。我不敢相信这仍然是此站点上的一个问题:/@格曼:可能只是个巨魔。希望自动化系统能在一夜之间处理好它。:)@托马拉克-我不确定我是否理解你的意思。我没有用extern做什么?@JoLT:你知道extern
做什么,就像你写的extern myStruct数据[12]代码>。错误消息表明您还有一个std::string*定义
,应该与您的myStruct数据[12]
得到相同的处理。我不敢相信这个站点上仍然存在问题/@格曼:可能只是个巨魔。希望自动化系统能在一夜之间处理好它。:)@托马拉克-我不确定我是否理解你的意思。我没有用extern做什么?@JoLT:你知道extern
做什么,就像你写的extern myStruct数据[12]代码>。错误消息表明您还有一个std::string*定义
,应该与您的myStruct数据[12]
给予相同的处理。
#include "definitions.h"
...
//form initialization
Error 1 error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * Definitions"
Error 2 error LNK1169: one or more multiply defined symbols found
#ifndef DEFINITIONS_H
#define DEFINITIONS_H
#endif