【问题标题】:My code can not be compiled, I have no idea why [closed]我的代码无法编译,我不知道为什么[关闭]
【发布时间】:2023-03-29 00:23:01
【问题描述】:

我有一些代码行,我得到了错误,但我不知道为什么。

T2 at(T1 p1, T1 p2) const
{
  return my_map[p1][p2];
}


T2 operator() (T1 p1, T1 p2) const
{
  return my_map[p1][p2];
}

代码在主目录中:

if ( max * max == relation.size() &&
       1462 == distances.at( "City1", "City2" ) &&
       1826 == cdist.at( "City3", "City1" ) )
{

  XY = cdist.size() -
                cdist.at( "City1", "City2" ) +
                distances( "City3", "City2" );

}

(其中 cdist 与距离是同一个对象,但是是一个常量。)

错误可能很简单,但我已经厌倦了。 (错误:将 '..' 作为 '..' 的 'this' 参数传递会丢弃限定符。)

【问题讨论】:

  • 您需要显示所有相关声明等,以及哪一行代码抛出错误?我们不是读心术的人。
  • 哈哈。祝你好运得到答案。我们不是通灵者。提供有意义的代码。
  • 假装你是其他人试图解决你自己的问题。 能否根据您上面给出的内容找出问题所在?
  • 显示某事。可重现(例如,首先尝试在ideone 上编译您的样本)!

标签: c++ map stl return-value


【解决方案1】:

您不能在 const 映射上调用 operator[]

请改用mapvariable.at(indexer).at(another_indexer)

【讨论】:

    【解决方案2】:

    我打赌这是因为 operator[] 上的 std::map 不是 const 操作。您可能需要改用find() 方法或C++11 at() 方法。

    【讨论】:

    • @sehe:这对于那些达到 C++11 的人来说非常棒。然后,您希望如何通知您所请求的内容不存在 - 结束迭代器或异常。
    • 一般来说,是的。但是他的代码使用的是return my_map[p1][p2];,它无论如何都不能容忍丢失的键:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多