2010-04-12 5 views
11

J'ai le membre suivant de la classe foo.Renvoyer la référence de la classe

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

Mais j'obtiens des erreurs de compilation. Quelle chose stupide je fais mal?

erreur du compilateur (gcc): erreur: initialisation invalide de référence non-const de type 'foo &' à partir d'un temporaire de type 'foo * const'

Répondre

21

this est un pointeur. Donc, il devrait être return *this;

+0

Merci je devrais savoir que :) – Thomas

6

Comme Naveen le fait remarquer, vous devez retourner *this. Juste un petit conseil: un moyen de comprendre ce que les erreurs de compilation un peu obscures signifient est d'essayer de compiler sur un compilateur différent pour voir s'il y a un meilleur message. Par exemple, vous pouvez utiliser Comeau online.

Dans ce cas, il donne:

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

Je ne sais pas, il vaut mieux dans ce cas - mais dans certains cas, les messages sont bien mieux.

+0

+1 pour le conseil rapide. Cela peut être vraiment clair. – Francesco

+1

en effet, MSVC 2008 renvoie, "erreur C2440: 'return': ne peut pas convertir de 'foo * const' à 'foo &'", ce qui je pense est assez clair. –

Questions connexes