2010-09-15 3 views
9

Lors de la compilation de ce code, je reçois le error suivant:Que signifie «initialisation invalide de la référence non-const»?

In function 'int main()': Line 11: error: invalid initialization of non-const reference of type 'Main&' from a temporary of type 'Main'

Voici mon code:

template <class T> 
struct Main 
{ 
    static Main tempFunction(){ 
     return Main(); 
    } 
}; 

int main() 
{ 
    Main<int> &mainReference = Main<int>::tempFunction(); // <- line 11 
} 

Je ne comprends pas pourquoi? Quelqu'un peut-il expliquer?

+1

Quelle est l'erreur – Mark

+1

S'il vous plaît poster les messages d'erreur exact du compilateur. –

+0

Votre déclaration de modèle ne dépend pas de la classe paramétrée. –

Répondre

9

Les temporaires C++ ne peuvent pas être liés à des références non constantes.

Main<int> &mainReference = Main<int>::tempFunction();

Ici vous essayez d'affecter le résultat d'une expression rvalue à une référence non constante mainReference qui est invalide.

Essayez de faire ce const

+2

http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ – log0

+0

@Ugo: Oui, bel article. À quoi veux-tu en venir? –

+0

Merci Prasoon Saurav. – Donald