0

私のコンテナに 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)」のエラーが発生します。

以前に起こったもう 1 つのことは、境界を超えた場合に 0 を返すことができなかったことです。この問題が解決されたら、そうするかもしれませんが、以前はエラー メッセージが表示されていました。そのとき x を返しただけで、本当に不満です。

4

1 に答える 1

4

const2 番目の (const) 演算子の実装から末尾の修飾子を省略しました。

const float& Quaternion::operator[](const int &idx) const
{
    // ...
}
于 2012-11-25T20:29:22.820 に答える