如何在方法的本地类中使用类的成员
How to use member of a class in a local class in a method?
我有一个这样的类:
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);
}
};
相关文章:
- 从私有成员变量的成员方法返回unique_ptr
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 如何对绑定的成员方法进行typedef,然后将该类型用作模板参数
- 从类C++外部调用指向成员方法的成员指针
- 在另一个 QThread 上运行成员方法时,无法将事件发送到其他线程拥有的对象
- 对成员类型的成员方法使用 std::result_of<>
- 我是否应该在构造函数或成员方法中进行大量初始化工作
- 如何检查是否调用了成员方法
- 我怎么可能从尚未定义某些成员方法的类创建实例?(C++)
- 有没有办法强制对 clang-format/clang-tidy 中的类成员/方法使用 "this->"?
- 指向 objc 类成员方法的函数指针,用于C++
- 对集合调用成员方法
- JetBrains CLion 不能建议字符串的成员方法
- 我无法在班级中获得MED股票来调用成员方法
- 如何在本机回调中使用Cython CDEF类成员方法
- 通过指针从for_each循环中访问成员方法
- 调用成员方法时会丢失此指针
- 为什么点运算符(.)可以与私有类成员/方法一起使用
- 静态调度以使用聚合类型的层次结构更正成员方法
- 显式模板专用化不能具有存储类 - 成员方法专用化