私はC++にかなり慣れていないので、許してください。しかし、演算子のあいまいさに関して問題があります。デスクトップでコンパイルされたコードについては、コンパイラ固有だと思います。しかし、私のラップトップではコンパイルできません。何が悪いのかはわかっていると思いますが、それを回避するためのエレガントな方法はわかりません。明らかな間違いがある場合はお知らせください。とにかく、これが私がやろうとしていることです:
私はVector4と呼ばれる独自のベクトルクラスを作成しました。これは次のようになります。
class Vector4
{
private:
GLfloat vector[4];
...
}
次に、問題を引き起こしているこれらの演算子があります。
operator GLfloat* () { return vector; }
operator const GLfloat* () const { return vector; }
GLfloat& operator [] (const size_t i) { return vector[i]; }
const GLfloat& operator [] (const size_t i) const { return vector[i]; }
Vector4クラスのインスタンスをglVertex3fvに渡すことができるように、変換演算子があります。明らかな理由で添え字を付けています。ただし、Vector4の添え字を含む呼び出しは、コンパイラーにとってあいまいになります。
enum {x, y, z, w}
Vector4 v(1.0, 2.0, 3.0, 4.0);
glTranslatef(v[x], v[y], v[z]);
候補者は次のとおりです。
candidate 1: const GLfloat& Vector4:: operator[](size_t) const
candidate 2: operator[](const GLfloat*, int) <built-in>
添え字演算子が既にVector4で定義されているのに、なぜ最初にVector4をGLfloat*に変換しようとするのでしょうか。型キャストを伴わない、これを回避する簡単な方法はありますか?私はばかげた間違いをしているだけですか?よろしくお願いします。