gpt4 book ai didi

c++ - 嵌套类成员函数不能访问封闭类的函数。为什么?

转载 作者:IT老高 更新时间:2023-10-28 22:03:40 24 4
gpt4 key购买 nike

请看下面的示例代码:

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 的私有(private)成员函数,但假设 B 的函数看不到它,则更改为 public。当然,它没有帮助。我正在尝试重用 A 方法提供的功能。为什么编译器不允许这个函数调用?正如我所看到的,它们是同一个封闭类(A)的一部分。我认为在 C++ 标准中封闭类的嵌套类成员的可访问性问题已经解决。

如何在不为 B 重写相同的方法 (foo()) 的情况下实现我想要做的事情,从而使 B 嵌套在 A 中?

我正在使用 VC++ 编译器版本 9 (Visual Studio 2008)。感谢您的帮助。

最佳答案

foo()A 的非静态成员函数,您试图在没有实例的情况下调用它。
嵌套类 B 是一个单独的类,它只有一些访问权限,对 A 的现有实例没有任何特殊知识。

如果 B 需要访问 A 你必须给它一个引用,例如:

class A {
class B {
A& parent_;
public:
B(A& parent) : parent_(parent) {}
void foobar() { parent_.foo(); }
};
B b_;
public:
A() : b_(*this) {}
};

关于c++ - 嵌套类成员函数不能访问封闭类的函数。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com