См. пример кода ниже:
class A
{
private:
class B
{
public:
foobar();
};
public:
foo();
bar();
};
В реализациях класса А и В:
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, но была изменена на общественность, предполагая, что функция B не может ее видеть. Конечно, это не помогло. Я пытаюсь повторно использовать функциональность, предоставляемую методом A. Почему компилятор не разрешает вызов этой функции? Как я вижу, они являются частью того же охватывающего класса (A). Я думал, что проблема доступности для вложенных классов классов для включения класса в стандарты С++ была решена.
Как я могу достичь того, что я пытаюсь сделать, не переписывая тот же метод (foo()) для B, который удерживает B вложенным в A?
Я использую VС++ компилятор ver-9 (Visual Studio 2008). Благодарим вас за помощь.