2010-03-27 4 views
2

Cela compile bien dans Visual Studio, mais pourquoi pas en XCode?Pourquoi gcc ne compilera-t-il pas une déclaration de classe en tant qu'argument de référence?

class A() 
{}; 

someMethod(A& a); 

someMethod(A()); //error: no matching function call in XCode only :( 

Est-ce une mauvaise forme? il semble ennuyeux d'avoir à écrire ce qui suit à chaque fois:

A a; 
someMethod(a); //successful compile on Xcode 

Suis-je manque quelque chose? Je ne suis pas très expérimenté donc merci pour toute aide!

+5

Toute la douleur causée par les extensions spécifiques à Microsoft ... c'est trop. –

Répondre

4

Vous ne pouvez pas lier un temporaire à une référence non-const. Il fonctionnerait si vous avez changé la fonction de prendre une référence const:

someMethod(const A& a); 

En outre,

A a(); 

ne déclare pas une variable locale. Il déclare une fonction nommée a qui ne prend aucun paramètre et retourne un objet de type A. Vous voulez dire:

A a; 
+0

merci pour votre réponse et vos corrections!^_ ^ – Jorge

0

Pour passer des références à rvalues ​​(dont la référence est implicitement obtenu) comme il est fait dans someMethod(A()), vous avez besoin références constantes. La déclaration valide (y compris la syntaxe correcte) est donc

void someMethod(const A& a); 
Questions connexes