原谅我,因为我对C++相当陌生,但我在运算符模糊性方面遇到了一些麻烦。我认为它是编译器特定的,用于在我的桌面上编译的代码。但是,它无法在我的笔记本电脑上编译。我想我知道发生了什么问题,但我没有看到它的优雅方式。如果我犯了一个明显的错误,请让我知道。总之,这里就是我想要做的事: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转化为GLfloat *第一时标操作已经在Vector4上定义了?有没有简单的解决方法,不涉及类型转换?我只是犯了一个愚蠢的错误?感谢您提前提供任何帮助。
应用于size_t参数的const不是必需的 - 它毫无意义。然而,这是良性的,并且不会影响您的问题。 – 2008-12-21 06:54:07
你应该告诉我们你正在使用什么编译器.... – SoapBox 2008-12-21 07:05:39
我无法检查我目前在桌面上使用的是哪种编译器,但我在我的笔记本电脑上使用的编译器(它给了我错误)是g ++ 4.3.2。我使用Eclipse,默认情况下有这些标志: -O0 -g3 -Wall -c -fmessage-length = 0 – Scott 2008-12-21 07:15:06