gpt4 book ai didi

c++ - header 中的 std::map 链接器失败

转载 作者:行者123 更新时间:2023-11-30 02:25:26 25 4
gpt4 key购买 nike

我正在尝试使用 code::blocks 和 mingw 创建一个简单的 c++ 程序,但我遇到了某种链接错误。当我尝试构建项目时,ld 返回 1,但没有其他详细信息。我曾尝试在网上搜索有关此类问题的信息,但一无所获。

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

测试.hpp

#include <map>
#include <string>

namespace testing{

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

}

测试.cpp

#include "test.hpp"
#include <iostream>

namespace testing {

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

}

构建输出

=== 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)) ===

最佳答案

某处应该有更全面的构建日志,其中会说 testing::example 被定义了多次。

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

// In header file
namespace testing{
extern std::map<std::string,int> example;
}

关于c++ - header 中的 std::map 链接器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44126914/

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