Non, ce n'est pas légal
class B
est une classe locale-methodA()
.
class B
Impossible d'accéder aux variables locales "automatiques" non statiques de la fonction englobante. Mais il peut accéder aux variables statiques de la portée englobante.
Il existe plusieurs restrictions sur les classes locales auxquelles avoir accès.
est ici une référence de la norme C++:
9,8 déclarations de classe locales [class.local]
- Une classe peut être définie dans une définition de fonction; une telle classe est appelée une classe locale. Le nom d'une classe locale est local à sa portée englobante. La classe locale est dans la portée de la portée englobante et a le même accès aux noms en dehors de la fonction que la fonction englobante. Les déclarations dans une classe locale peuvent utiliser uniquement des noms de type, des variables statiques, des variables et fonctions externes et des énumérateurs provenant de la portée englobante.
[Exemple:
int x;
void f()
{
static int s ;
int x;
extern int g();
struct local {
int g() { return x; } // error: x is auto
int h() { return s; } // OK
int k() { return ::x; } // OK
int l() { return g(); } // OK
};
// ...
}
local* p = 0; // error: local not in scope
-fin exemple]
2. Une fonction d'enceinte n'a pas un accès privilégié à des membres de la classe locale; il obéit aux règles d'accès habituelles (article 11). Les fonctions membres d'une classe locale doivent être définies dans leur définition de classe, si elles sont définies. 3. Si la classe X est une classe locale, une classe emboîtée Y peut être déclarée dans la classe X et définie plus tard dans la définition de la classe X ou être définie plus tard dans la même portée que la définition de la classe X. La classe imbriquée dans une classe locale est une classe locale.
4. Une classe locale ne doit pas avoir de membres de données statiques.
bien ... pourquoi ne pas l'essayer? –
http://www.comeaucomputing.com/tryitout/ "ligne 9: erreur: la référence à la variable locale de la fonction englobante n'est pas autorisée" –
En fait, Im dans une localité distante et je n'ai pas de compilateur dans cette m/c :( – user844631