2010-03-24 16 views
9

estoy tratando de sobrecargar el operador de eliminar la referencia, pero compilar el código siguiente produce el error en 'initializing' : cannot convert from 'X' to 'int':sobrecarga operador para deshacer referencias

struct X { 
    void f() {} 
    int operator*() const { return 5; } 
}; 

int main() 
{ 
    X* x = new X; 
    int t = *x; 
    delete x; 
    return -898; 
} 

¿qué estoy haciendo mal?

Respuesta

14

Debe aplicar el operador de referencia a un tipo de clase. En su código x tiene un tipo de puntero. Escribe lo siguiente:

int t = **x; 

o

int t = x->operator*(); 
14

Está desreferenciando un puntero a X. Tu clase está bien (en la medida en que esté implementada).

int main() 
{ 
    X x; // no pointer 
    int t = *x; // x acts like a pointer 
} 
1

Si desea que el código original para trabajar, es necesario sobrecargar el operador int-cast para su clase:

operator int() const { return 5; } 
+0

'int operador 'tiene muchos problemas y es mejor evitarlos. El operador de desreferencia tiene un uso legítimo como emulación de puntero. – Potatoswatter

+0

@David: los que se convierten a 'bool' tienen uno más que los otros, pero tal vez es una gota en el cubo; v) – Potatoswatter

+0

@David: La pregunta es sobre' int operator * ', not' operator int * ' – visitor