gpt4 book ai didi

多个 .cpp 文件的 C++ 链接错误

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:04 25 4
gpt4 key购买 nike

这是我的头文件。如果我只将它包含在一个 .cpp 文件中,它就符合要求,但是一旦我尝试将它包含在两个或多个 .cpp 文件中,只要 map 包含在 header 中,它就会产生错误。除了调用 .cpps 中的文件外,我什么也没做。

#ifndef _TOOLS_H_
#define _TOOLS_H_
#include <iostream>
#include <map>
#include <sstream>
#include <string>

using namespace std;

map<char, string> d_one;
map<char, string> d_ten;

void smain();
string converter(int i);

string one(string in);
string two(string in);
string three(string in);
string four(string in);
string five(string in);
string six(string in);
string seven(string in);
string eight(string in);
string nine(string in);
string ten(string in);
#endif

这是 Visual Studio 2013 给我的错误:

1>  Dictionary.cpp
1> Funcion.cpp
1> Main.cpp
1>Funcion.obj : error LNK2005: "class std::map<char,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<char>,class std::allocator<struct std::pair<char const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > d_ten" (?d_ten@@3V?$map@DV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@D@2@V?$allocator@U?$pair@$$CBDV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@std@@@2@@std@@A) already defined in Dictionary.obj
1>Funcion.obj : error LNK2005: "class std::map<char,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<char>,class std::allocator<struct std::pair<char const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > d_one" (?d_one@@3V?$map@DV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@D@2@V?$allocator@U?$pair@$$CBDV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@std@@@2@@std@@A) already defined in Dictionary.obj
1>Main.obj : error LNK2005: "class std::map<char,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<char>,class std::allocator<struct std::pair<char const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > d_ten" (?d_ten@@3V?$map@DV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@D@2@V?$allocator@U?$pair@$$CBDV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@std@@@2@@std@@A) already defined in Dictionary.obj
1>Main.obj : error LNK2005: "class std::map<char,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<char>,class std::allocator<struct std::pair<char const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > d_one" (?d_one@@3V?$map@DV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@U?$less@D@2@V?$allocator@U?$pair@$$CBDV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@std@@@2@@std@@A) already defined in Dictionary.obj
1>MSVCRT.lib(crtexe.obj) : error LNK2001: unresolved external symbol _main
1>C:\Users\Vincent\Google Drive\Programming\C++\Challange\Release\Challange.exe : fatal error LNK1120: 1 unresolved externals

最佳答案

这就是 extern 的作用。

在你的头文件中:

extern map<char, string> d_one;
extern map<char, string> d_ten;

这表示“这些 map 存在于其他地方”(而不是“创建这些 map ”)。

在一个(恰好一个)源文件中:

map<char, string> d_one;
map<char, string> d_ten;

关于多个 .cpp 文件的 C++ 链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20310578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com