将类指针类型转换为键时出错

Error converting class pointer type to key

本文关键字:出错 类型转换 指针      更新时间:2023-10-16

我对 c++ 有点陌生,我遇到了一个奇怪的错误。我写了一个相当简单的类,叫做endpoint。在endpoint中,我有一个类型为std::map<endpoint*, ppr_t>的属性(其中ppr_t是结构的typedef(。当我尝试通过对属性运行 count 方法来检查映射中的项目时,出现以下编译错误:

error: invalid conversion from ‘const endpoint*’ to ‘std::map<endpoint*, ppr_t>::key_type {aka endpoint*}’

我不确定为什么会弹出此错误。也许是因为这个类没有比较功能?即便如此,使用时也会发生相同的错误std::unordered_map.

您正在尝试将const endpoint*分配给endpoint,这会丢弃常量限定符。这样做是为了防止您修改地图的键值。

地图旨在使用其键快速查找值。当您将一对插入到映射时,您将用值"绑定"特定键。例如,电话簿。您记得,如果您在电话簿中找到他的名字(密钥(,则可以致电您的朋友(值 = 电话号码(。但是如果你改变他的名字,那个电话号码的所有者是谁?这种情况很奇怪,会导致错误。但相反,当他告诉你他买了一部新手机时,你可以很容易地更改你的朋友号码。

因此,如果您从键中获取 const 指针,则只能使用它,而不是阻止地图的组织,并且仍然通过其键查找值。您可以使用非常量指针或对值的引用,并随时更改它们,它们仍将与常量键一起使用。