std::unordered_map::find和count以key为参数无法编译
std::unordered_map::find and count with key as argument fail to compile
我在为项目编译一些代码时遇到了一些神秘的错误。我使用std::unordered_map
在游戏中存储世界的各个部分,这样多个人就可以在同一个区域玩而不会混淆服务器。在world_manager.hpp中,我有一个密钥结构:
struct chunk_key {
int32_t cX, cZ;
uint8_t dimension;
};
还有一张无序的地图:
std::unordered_map<chunk_key, class chunk*, chunk_key_hasher> chunk_buffer;
在world_manager.cpp中,我有一个名为"chunk_is_loaded"的函数来测试映射中是否已经存在块。这就是错误的开始。
bool chunk_is_loaded(chunk_key* key)
{
if(chunk_buffer.count(key) != 0)
{
return true;
}
else
{
return false;
}
}
错误位于"chunk_buffer.count(key(",其中GCC给出以下错误:
world_manager.cpp:在函数'bool
world::chunk_is_loaded(world::chunk_key*('中:
world_manager.cpp:8:34:错误:没有匹配函数可用于调用
"std::unordereded_map world::chunk_key_hasher>::count(world::chunk_key*&(">
if(chunk_buffer.count(key(!=0(
^
world_manager.cpp:8:34:注意:候选为:
在/usr/include/c++/4.8/undered_map:48:0中包含的文件中,
来自world_manager.hpp:7,
来自world_manager.cpp:1:
/usr/include/c++/4.8/bits/undered_map.h:560:7:注意:
std::unordered_map<_键,_Tp,_Hash,_Pred,_Alloc>::size_type
std::unordered_map<_键,_Tp,_Hash,_Pred,_Alloc>::count c>::key_type=world::chunk_key]
count(const key_type&__x(const
^
/usr/include/c++/4.8/bits/undered_map.h:560:7:注意:参数1从'world::chunk_key*'到'const-key_type&{aka const world::chunk_key&}'
我不理解这个错误,当我按值传递密钥时,它会给我更长的错误字符串,甚至更神秘。感谢您的帮助。
std::unordered_map<chunk_key, class chunk*, chunk_key_hasher> chunk_buffer
映射的键的类型是"chunk_key",而不是"chuck_key*"。
我想您的意图不是将chunk_key存储为对象,而是将其存储为指针。
如果是,请更新地图声明。您还必须确保chunk_key_hasher((理解chunk_key*。
否则,你应该做
if(chunk_buffer.count(*key) != 0) // dereference key
但是,与不考虑c++11的情况下在映射中存储指针相比,这无疑效率较低。
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- 以"const void * key, void * out"为参数的元帅?
- 如何约束模板参数以符合std::map中的Key
- std::unordered_map::find和count以key为参数无法编译
- 当KEY为boost::可选参数时用于boost多索引的迭代器