C ++ Operator Ambiguity

Verzeihen Sie mir, ich bin ziemlich neu in C ++, aber ich habe einige Probleme hinsichtlich der Mehrdeutigkeit von Operatoren. Ich halte es für compilerspezifisch für den Code, der auf meinem Desktop kompiliert wurde. Es kann jedoch nicht auf meinem Laptop kompiliert werden. Ich glaube, ich weiß, was falsch läuft, aber ich sehe keinen eleganten Weg dahin. Bitte lassen Sie mich wissen, wenn ich einen offensichtlichen Fehler mache. Jedenfalls versuche ich Folgendes zu tun:

Ich habe meine eigene Vektorklasse namens Vector4 erstellt, die ungefähr so aussieht:

class Vector4
{
 private:
   GLfloat vector[4];
 ...
}

Dann habe ich diese Operatoren, die das Problem verursachen:

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]; }

Ich habe den Konvertierungsoperator, damit ich eine Instanz meiner Vector4-Klasse an glVertex3fv übergeben kann, und ich habe aus offensichtlichen Gründen einen Index. Aufrufe, bei denen der Vector4 subskribiert wird, werden für den Compiler jedoch nicht eindeutig:

enum {x, y, z, w}
Vector4 v(1.0, 2.0, 3.0, 4.0);

glTranslatef(v[x], v[y], v[z]);

Hier sind die Kandidaten:

candidate 1: const GLfloat& Vector4:: operator[](size_t) const
candidate 2: operator[](const GLfloat*, int) <built-in>

Warum wird versucht, meinen Vector4 zuerst in einen GLfloat * umzuwandeln, wenn der Indexoperator bereits in Vector4 definiert ist? Gibt es einen einfachen Weg, der kein typecasting beinhaltet? Mache ich nur einen dummen Fehler? Vielen Dank für jede Hilfe im Voraus.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage