La fonction membre de classe imbriquée ne peut pas accéder à la fonction de la classe englobante. Pourquoi?

Voir l'exemple de code ci-dessous:

class A
{
private:
    class B
    {
    public:
        foobar();
    };
public:
    foo();
    bar();
};

Au sein de la classe A & B mise en œuvre:

A::foo()
{
    //do something
}

A::bar()
{
    //some code
    foo();
    //more code
}

A::B::foobar()
{
    //some code
    foo(); //<<compiler doesn't like this
}

Les drapeaux du compilateur l'appel à foo() dans la méthode foobar(). Plus tôt, j'avais foo() comme fonction membre privée de la classe A, mais il a changé de public en supposant que B est la fonction ne peut pas le voir. Bien sûr, il n'a pas aidé. Je suis en train de ré-utiliser la fonctionnalité fournie par Une méthode. Pourquoi ne pas le compilateur permettre à cet appel de fonction? Comme je le vois, ils font partie de la même classe englobante (Un). J'ai pensé que le problème de l'accessibilité pour la classe imbriquée meebers pour la classe englobante dans les normes C++ a été résolu.

Comment puis-je obtenir ce que je suis en train de faire sans avoir à ré-écrire la même méthode (foo()) pour B, qui, B imbriquée à l'intérieur d'Un?

J'utilise VC++ compilateur ver-9 (Visual Studio 2008). Je vous remercie pour votre aide.

source d'informationauteur Rahul