如何在方法的本地类中使用类的成员

How to use member of a class in a local class in a method?

本文关键字:成员 方法      更新时间:2023-10-16

我有一个这样的类:

class A
{
protected:
int t = 10;
public:
void f()
{
struct B
{
void g()
{
print(t); //using t
}
};
B b;
b.g();
}
};
ERROR: a nonstatic member reference must be relative to a specific object

我明白了,类A的成员在结构B中是不可见的(它在类A方法内部(。但我该如何捕捉它们,或者交朋友A和B呢?(如果可能的话(

A的方法中定义B不会使A的实例包含B

无论在哪里定义类,都需要一个实例来调用非静态方法。让他们成为朋友也是不够的,因为你仍然需要一个A实例,你需要以某种方式传递给B

class A {
protected:
int t = 10;
public:
void f() {
struct B {
void g(A& a) {
int x = a.t;
}
};
B b;
b.g(*this);
}
};

您需要将A对象(此处为this(传递给g方法才能访问A的数据。例如,通过参数:

void f()
{
struct B
{
void g(const A& a)
{
printf("%d", a.t); //using t
}
};
B b;
b.g(*this);
}

本地类B的实例不包含类A的对象的任何方面。为了访问B::g()A的成员变量,您必须将指向A实例的指针/reference传递给B::g()

class A
{
protected:
int t = 10;
public:
void f()
{
struct B
{
void g(A* a)
{
print(a->t);
}
};
B b;
b.g(this);
}
};