2010-04-12 20 views
11

Tengo el siguiente miembro de la clase foo.Devolver la referencia de la clase a este

foo &foo::bar() 
{ 
    return this; 
} 

Pero obtengo errores del compilador. ¿Qué cosa tan estúpida estoy haciendo mal?

de error del compilador (gcc): Error: no válido inicialización de referencia no constante del tipo 'foo &' de un temporal del tipo 'foo * const'

Respuesta

21

this es un puntero. Entonces debería ser return *this;

+0

Gracias, debería saber que :) – Thomas

6

Como señala Naveen, debe devolver *this.

Sin embargo, una sugerencia rápida: una forma de descubrir lo que significan los errores del compilador es intentar compilar en un compilador diferente para ver si hay un mensaje mejor. Por ejemplo, puede usar Comeau online.

En este caso se da:

"ComeauTest.c", line 7: error: initial value of reference to non-const must be an 
      lvalue 
    return this; 
      ^
No

seguro de que es mejor en este caso - pero en algunos casos, los mensajes son mucho mejor.

+0

+1 para el consejo rápido. Puede ser realmente clarificador. – Francesco

+1

de hecho, MSVC 2008 devuelve, "error C2440: 'return': no ​​se puede convertir de 'foo * const' a 'foo &'", lo que creo que es bastante claro. –

Cuestiones relacionadas