une classe-clé doit être déclaré lors de la déclaration d'un ami
Le compilateur g++ se plaint avec cette erreur lorsque je déclare un ami ainsi:
friend MyClass;
au lieu de
friend class MyClass;
Pourquoi la classe mots clés sont-ils nécessaires?
(Borland C++ compilateur, d'ailleurs, n'en a pas besoin.)
Ne pouvais pas le compilateur simplement look-up MyClass dans la table de symboles et dire qu'il a été déclaré en tant que classe? (c'est évidemment de faire de la recherche car de toute façon on se plaint quand MyClass-il pas déclaré)
Ce n'est pas comme cela avant la déclaration de la classe: j'ai encore d'avoir déclaré la classe ci-dessus, ou au moins de l'avant, l'a déclaré.
Il serait logique pour moi (ce serait génial, en fait) si
friend class MyClass;
fait une déclaration anticipée si nécessaire, sinon, il semble juste comme syntaxiques de sel pour moi.
J'ai été joyeusement à l'aide de ami déclarations sans classe ou struct mot-clé sans compilateur plaintes depuis près de 20 ans.
Est-ce quelque chose de relativement nouveau?
- 20 ans! Vous devez avoir travaillé avec Bjorn.
- J'ai utilisé le C-Avant, quand j'ai été diplômé de l'école au sujet de 1989. J'ai utilisé principalement Borland C++ depuis 1991.
- Bjorn?! Lol.
Vous devez vous connecter pour publier un commentaire.
J'ai été surpris de voir sur ce sujet (et en conséquence supprimé une précédente réponse incorrecte). Le C++03 standard dit dans 11.4:
Puis assurez-vous il n'y a pas de malentendu, c'notes de bas de page que avec:
GCC est le seul compilateur que j'ai qui se plaint du manque de classe de la clé, mais il semble que d'autres compilateurs nous laisser sortir avec quelque chose de non-standard...
Maintenant, comme pour la justification - que vous auriez à demander à quelqu'un qui en sait plus sur les compilateurs (ou normes) que je fais.
friend
sans classe-la clé fonctionne sous g++ 4.7.0/4.7.3 avec l'option-std=c++11
Au point de votre question, parce que c'est la façon dont la norme ISO/IEC 14882:2003 spécifie il (section 7.1.4). Le
friend
construction est essentiellement définie comme:où
<declaration>
est la validité de la déclaration d'une classe, structure, modèle, ou de la fonction.Ainsi,
n'est pas une déclaration valide, considérant ce qui suit:
ou:
sont.
Idem pour, en conséquence:
ou
MyClass
est un modèle de classe, lafriend
déclaration de latemplate
aussi