标头中std::map的链接器失败 我试图用代码:Cube:MIX和MIWW创建一个简单的C++程序,我遇到了某种链接错误。当我尝试构建项目时,ld返回1,没有其他详细信息。我曾尝试在网上搜索有关这类问题的信息,但一直未能找到任何信息

标头中std::map的链接器失败 我试图用代码:Cube:MIX和MIWW创建一个简单的C++程序,我遇到了某种链接错误。当我尝试构建项目时,ld返回1,没有其他详细信息。我曾尝试在网上搜索有关这类问题的信息,但一直未能找到任何信息,c++,mingw,std,ld,stdmap,C++,Mingw,Std,Ld,Stdmap,我尝试将example的定义从test.hpp移动到test.cpp,这确实解决了链接问题,但它使我无法从导入test.hpp的其他文件访问example。我也尝试过完全删除名称空间,但出于组织上的原因,我希望避免这样做(如果这是完全不合适的名称空间用法,我希望知道)。我正在努力使我的程序的几个部分最终能够在运行时访问和更新example test.hpp #include <map> #include <string> namespace testing{

我尝试将
example
的定义从
test.hpp
移动到
test.cpp
,这确实解决了链接问题,但它使我无法从导入
test.hpp
的其他文件访问
example
。我也尝试过完全删除名称空间,但出于组织上的原因,我希望避免这样做(如果这是完全不合适的名称空间用法,我希望知道)。我正在努力使我的程序的几个部分最终能够在运行时访问和更新
example

test.hpp

#include <map>
#include <string>

namespace testing{

    std::map<std::string,int> example;

}

应该有一个更全面的构建日志,它会说,
testing::example
被多次定义

解决方案很简单:只在头文件中声明变量,使用
extern
关键字:

// In header file
namespace testing{
    extern std::map<std::string,int> example;
}
//在头文件中
命名空间测试{
extern std::map示例;
}

标题和cpp都定义了变量
示例
。您应该将标头中的变量声明为
extern


谢谢,自从我上了C++课程,我完全忘记了 Extn>代码>,已经有很长时间了。
=== Build: Debug in SilhouetteEngine (compiler: GNU GCC Compiler) ===
error: ld returned 1 exit status
=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===
// In header file
namespace testing{
    extern std::map<std::string,int> example;
}