请看下面的示例代码:
编译器标记了在方法foobar()中调用foo()的代码行。我先前将foo()作为类A的私有成员函数,但现在更改为公共成员函数,认为B的函数无法访问它。当然,这并没有起到帮助的作用。我试图重用A方法提供的功能。为什么编译器不允许这个函数调用?在我看来,它们是同一封闭类(A)的一部分。我认为C++标准中关于嵌套类成员对封闭类可访问性问题已经解决了。
如何在保持B嵌套在A的情况下实现我想做的事情而不必为B重写相同的方法(foo())?
我正在使用VC ++编译器版本9(Visual Studio 2008)。感谢您的帮助。
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
}
编译器标记了在方法foobar()中调用foo()的代码行。我先前将foo()作为类A的私有成员函数,但现在更改为公共成员函数,认为B的函数无法访问它。当然,这并没有起到帮助的作用。我试图重用A方法提供的功能。为什么编译器不允许这个函数调用?在我看来,它们是同一封闭类(A)的一部分。我认为C++标准中关于嵌套类成员对封闭类可访问性问题已经解决了。
如何在保持B嵌套在A的情况下实现我想做的事情而不必为B重写相同的方法(foo())?
我正在使用VC ++编译器版本9(Visual Studio 2008)。感谢您的帮助。
parent
可能不是最好的成员变量名 - 它很容易与继承混淆。 - Nikolai Fetissov