Ambiguidade do operador C ++
Perdoe-me, pois sou bastante novo em C ++, mas estou tendo alguns problemas em relação à ambiguidade do operador. Eu acho que é específico do compilador, para o código compilado na minha área de trabalho. No entanto, ele não consegue compilar no meu laptop. Acho que sei o que está acontecendo de errado, mas não vejo uma maneira elegante de contornar isso. Informe-me se estou cometendo um erro óbvio. De qualquer forma, aqui está o que estou tentando fazer:
Eu criei minha própria classe de vetor chamada Vector4, que se parece com isso:
class Vector4
{
private:
GLfloat vector[4];
...
}
Então eu tenho esses operadores, que estão causando o problema:
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]; }
Eu tenho o operador de conversão para que eu possa passar uma instância da minha classe Vector4 para o glVertex3fv e possuo uma assinatura por motivos óbvios. No entanto, as chamadas que envolvem a assinatura do Vector4 tornam-se ambíguas para o compilador:
enum {x, y, z, w}
Vector4 v(1.0, 2.0, 3.0, 4.0);
glTranslatef(v[x], v[y], v[z]);
Aqui estão os candidatos:
candidate 1: const GLfloat& Vector4:: operator[](size_t) const
candidate 2: operator[](const GLfloat*, int) <built-in>
Por que ele tentaria converter meu Vector4 em um GLfloat * primeiro quando o operador subscrito já está definido no Vector4? Existe uma maneira simples de contornar isso que não envolve a conversão de texto? Estou apenas cometendo um erro bobo? Agradeço por qualquer ajuda desde já.