Функция-член вложенного класса не может получить доступ к функции включающего класса. Зачем?
Пожалуйста, посмотрите пример кода ниже:
class A
{
private:
class B
{
public:
foobar();
};
public:
foo();
bar();
};
В рамках реализации класса A & B:
A::foo()
{
//do something
}
A::bar()
{
//some code
foo();
//more code
}
A::B::foobar()
{
//some code
foo(); //<<compiler doesn't like this
}
Компилятор отмечает вызов функции foo () в методе foobar (). Ранее у меня была функция foo () в качестве закрытой функции-члена класса A, но я переключился на public, предполагая, что функция B не может ее видеть. Конечно, это не помогло. Я пытаюсь повторно использовать функциональность, предоставляемую методом А. Почему компилятор не позволяет этот вызов функции? На мой взгляд, они являются частью одного класса (A). Я думал, что проблема доступности для вложенных классов классов для включения класса в стандарты C ++ была решена.
Как мне добиться того, что я пытаюсь сделать, не переписывая тот же метод (foo ()) для B, который поддерживает B вложенным в A?
Я использую компилятор VC ++ версии 9 (Visual Studio 2008). Спасибо за помощь.