gpt4 book ai didi

c++ - 解释 Unresolved external C++

转载 作者:行者123 更新时间:2023-12-02 10:02:15 25 4
gpt4 key购买 nike

我正在尝试制作我的世界渲染器。从区域文件加载世界时,它会将解析后的 NBT 数据存储在无序映射中,其中 nbt 数据作为值,全局 block 坐标作为键。具体unordered_map<pair<int, int>, CompoundTag*> (复合标签为 NBT 数据)

但是,我遇到了似乎指向无序映射的编译时错误。如下。

Error LNK2001 unresolved external symbol "class std::unordered_map,struct Chunk,struct std::hash >,struct std::equal_to >,class std::allocator const ,struct Chunk> > > __cdecl createChunks(class std::unordered_map,class CompoundTag,struct std::hash >,struct std::equal_to >,class std::allocator const ,class CompoundTag> > > &,class Asset &)" (?createChunks@@YA?AV?$unordered_map@U?$pair@HH@std@@UChunk@@U?$hash@U?$pair@HH@std@@@2@U?$equal_to@U?$pair@HH@std@@@2@V?$allocator@U?$pair@$$CBU?$pair@HH@std@@UChunk@@@std@@@2@@std@@AEAV?$unordered_map@U?$pair@HH@std@@VCompoundTag@@U?$hash@U?$pair@HH@std@@@2@U?$equal_to@U?$pair@HH@std@@@2@V?$allocator@U?$pair@$$CBU?$pair@HH@std@@VCompoundTag@@@std@@@2@@2@AEAVAsset@@@Z)



我以前解决过 Unresolved external 问题,通常是因为我忘记包含程序需要的外部文件(因此得名)。然而,这一次我相当肯定我拥有它需要的一切。我在文件顶部包含了 unordered_map。我已经包含了定义 Chunk 的 header ,并且我知道需要自定义构建 hash 和 equal_to 函数,并在包含的头文件中为它们提供了以下内容。
namespace std
{
template<>
struct hash<pair<int32_t, int32_t>>
{
size_t operator ()(const pair<int32_t, int32_t>& value) const
{
uint64_t key = ((uint64_t)value.first) << 32 | (uint64_t)value.second;
key ^= (key >> 33);
key *= 0xff51afd7ed558ccd;
key ^= (key >> 33);
key *= 0xc4ceb9fe1a85ec53;
key ^= (key >> 33);
return (size_t)key;
}
};


template<>
struct equal_to<pair<int32_t, int32_t>>
{
bool operator ()(const pair<int32_t, int32_t>& v1, const pair<int32_t, int32_t>& v2) const
{
return (v1.first == v2.first) && (v1.second == v2.second);
}
};
}

我认为我可能需要做的唯一另一件事是提供自定义分配器?但是我发现关于在 unordered_maps 中使用对作为键的所有内容都表明这是没有必要的。我有点难过,如果有任何见解,我将不胜感激。如果您有任何问题或想查看更多代码,请询问。它在我的 github 上如果您想将项目视为一个整体,但如果您(有理由)不想整理整个困惑,请要求澄清任何事情或额外信息。

编辑 1,我尽我所能解析错误。
class std::unordered_map
<
struct std::pair
<
int,
int
>,
struct Chunk *,
struct std::hash
<
struct std::pair
<
int,
int
>
>,
struct std::equal_to
<
struct std::pair
<
int,
int
>
>,
class std::allocator
<
struct std::pair
<
struct std::pair
<
int,int
> const,
struct Chunk *
>
>
>

__cdecl createChunks(
class std::unordered_map
<
struct std::pair
<
int,
int
>,
class CompoundTag *,
struct std::hash
<
struct std::pair
<
int,
int
>
>,
struct std::equal_to
<
struct std::pair
<
int,
int
>
>,
class std::allocator
<
struct std::pair
<
struct std::pair
<
int,
int
> const,
class CompoundTag *
>
>
>&
,class Asset&
)


(?createChunks@@YA?AV?$unordered_map@U?$pair@HH@std@@PEAUChunk@@U?$hash@U?$pair@HH@std@@@2@U?$equal_to@U?$pair@HH@std@@@2@V?$allocator@U?$pair@$$CBU?$pair@HH@std@@PEAUChunk@@@std@@@2@@std@@AEAV?$unordered_map@U?$pair@HH@std@@PEAVCompoundTag@@U?$hash@U?$pair@HH@std@@@2@U?$equal_to@U?$pair@HH@std@@@2@V?$allocator@U?$pair@$$CBU?$pair@HH@std@@PEAVCompoundTag@@@std@@@2@@2@AEAVAsset@@@Z) MCRenderer C:\Users\noahm\source\repos\noahwhygodwhy\MCRenderer\MCRenderer\MCRenderer.obj 1

最佳答案

错误信息很长,但如果你仔细阅读,它指的是一个名为 createChunks 的缺失函数。 .

unordered_map 只是该函数的返回类型(和参数类型)。

BTW你好像有个误区, undefined reference 一般不是缺少头文件引起的,缺少头文件会导致编译错误。未解析的外部通常是由于链接步骤中缺少文件(目标文件或库文件)造成的。

更新

查看您的代码后,我可以看到问题是一个错字。在 chunkPipeline.hpp你声明一个函数createChunks但在 chunkPipeline.cpp相同的函数被称为 createChunk .反驳我之前的断言,即 undefined reference 是在链接期间导致丢失文件的,它们也可能是由拼写错误引起的。

关于c++ - 解释 Unresolved external C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62056022/

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