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

时间:2018-10-12 01:31:10

标签: c++ class pointers key stdmap

我对C ++有点陌生,并且遇到了一个奇怪的错误。我有一门很简单的课,叫做http://placekitten.com/220/200 http://placekitten.com/180/200 http://placekitten.com/130/200 http://placekitten.com/270/200 。在endpoint中,我具有类型endpoint的属性(其中std::map<endpoint*, ppr_t>是结构的ppr_t)。当我尝试通过在属性上运行count方法来检查地图中的某个项目时,出现以下编译错误:

typedef

我不确定为什么会弹出此错误。也许是因为我没有此类的比较功能?即使如此,使用error: invalid conversion from ‘const endpoint*’ to ‘std::map<endpoint*, ppr_t>::key_type {aka endpoint*}’ 时也会发生相同的错误。

1 个答案:

答案 0 :(得分:0)

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

地图旨在通过使用其键快速找到值。当您在地图上插入一对时,您是在将一个特定的键“绑定”到一个值。例如,电话簿。您还记得,如果您在电话簿中找到他的名字(关键字),您可以呼叫您的朋友(值=电话号码)。但是,如果您更改他的名字,那么该电话号码的所有者是谁?这种情况很奇怪,并会导致错误。但是,相反,当他告诉您他购买了新手机时,您可以轻松更改您的朋友号码。

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