C++ 讨厌的链接错误

C++ 讨厌的链接错误,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

我正在使用VisualStudio2010,我相信我有一个项目设置问题。我有一个头文件,其中包含一些声明:

定义.h

#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