原谅我,因为我对 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*?有没有一种不涉及类型转换的简单方法?我只是犯了一个愚蠢的错误吗?感谢您提前提供任何帮助。