【问题标题】:Error converting class pointer type to key将类指针类型转换为键时出错
【发布时间】:2018-10-12 01:31:10
【问题描述】:

我对 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 指针强制转换为非 const 指针,这会破坏 const 的目的。
  • 请分享代码。
  • 分享代码,只有任何人都可以提供一定的答案。

标签: c++ class pointers key stdmap


【解决方案1】:

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

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

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

【讨论】:

  • 原来是这个问题,没有意识到我不能使用 const 值来查找地图项。谢谢!
  • 您可以使用 const 值来查找地图项。您无法修改存储在地图中的实际密钥。
猜你喜欢
  • 2014-02-06
  • 2021-09-20
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2017-10-07
  • 1970-01-01
相关资源
最近更新 更多