【问题标题】:Overloading indexing operator重载索引运算符
【发布时间】:2015-06-30 12:48:31
【问题描述】:

我正在尝试重载索引运算符[]。我有两个版本 我需要同时使用它们,但是当我构建项目时,其中一个被调用,并且无论我在哪里使用第二个都会出现错误:Invalid operands to binary expression double and Quarters

这是第一个:

Quarters& Security :: operator [] (QuarterType quarter){
    return quartersData[static_cast<int>(quarter)];
}

第二个:

const double& Security :: operator [] (QuarterType quarter) const{
    return (quartersData[static_cast<int>(quarter)].getPrediction());
}

有什么问题,我可以做些什么来解决它?

【问题讨论】:

  • “无论我在哪里使用第二个,都会出错”...那个错误会是什么?当您尝试调用第二个时,代码行是什么?
  • @CoryKramer 错误是:二进制表达式 double 和 Quarters 的操作数无效,行的示例是“double x=security[quarterType]”
  • @Raw305 是security const?如果是security[quarterType] 将返回const double&amp;,但如果它不是它将返回Quarters&amp;,这是一种奇怪的重载方式。也许您应该改用转换运算符重载?
  • 您能否编辑您的帖子以包含该行以及更多的上下文行(即定义securityquarterType 的位置)

标签: c++ indexing operator-overloading


【解决方案1】:

覆盖不考虑返回类型。由于在这两种情况下参数类型相同,因此覆盖仅考虑对象的const-ness。如果您的对象不是 const,那么将调用非 const 版本的 operator[],无论您接下来尝试使用它做什么。

【讨论】:

    猜你喜欢
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2019-08-21
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多