【问题标题】:"error: expected unqualified-id before 'float' " for operator[] overload“错误:'float'之前的预期不合格ID”用于运算符[]重载
【发布时间】:2012-11-26 04:29:22
【问题描述】:

我尝试为我的一个容器实现 operator[]。但我对 c++ 真的很陌生,而且我的实现似乎有错误。

我这样声明它们:

float& operator[](const int &idx);
const float& operator[](const int &idx) const;

应该没问题,它几乎是从教程中复制/粘贴的。现在,Quaternion.cpp 看起来像这样:

float& Quaternion::operator[](const int &idx)
{
    if(idx == 0)
    {
        return x;
    }
    if(idx == 1)
    {
        return y;
    }
    if(idx == 2)
    {
        return z;
    }
    if(idx == 3)
    {
        return w;
    }
    std::cerr << "Your Quaternion is only accessible at positions {0, 1, 2, 3}!" 
              << std::endl;
    return x;
}

const float& Quaternion::operator[](const int &idx)
{
    if(idx == 0)
    {
        return const x;
    }
    if(idx == 1)
    {
        return const y;
    }
    if(idx == 2)
    {
        return const z;
    }
    if(idx == 3)
    {
        return const w;
    }
    std::cerr << "Your Quaternion is only accessible at positions {0, 1, 2, 3}!" 
         << std::endl;
    return x;
}

我收到签名“const float& Quaternion::operator[](const int &idx)”的错误。

之前发生的另一件事是,如果超出边界,我无法返回 0。也许我会,一旦这个问题得到解决,但它之前给了我一条错误消息。那时我刚刚退回了x,这让我很不高兴。

【问题讨论】:

  • 您的签名不匹配。
  • 从教程中复制/粘贴就像在街上吃口香糖一样。不要这样做。

标签: c++ overloading operator-keyword


【解决方案1】:

您在第二个 (const) 运算符实现中省略了结尾的 const 修饰符:

const float& Quaternion::operator[](const int &idx) const
{
    // ...
}

【讨论】:

  • 哇,这很简单。谢谢 =) 现在工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多