如何在方法中使用本地类中的类成员?
Posted
技术标签:
【中文标题】如何在方法中使用本地类中的类成员?【英文标题】:How to use member of a class in a local class in a method? 【发布时间】:2019-10-25 15:38:47 【问题描述】:我有这样的课程:
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? (如果可能的话)
【问题讨论】:
【参考方案1】:在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);
;
【讨论】:
【参考方案2】:您需要将A
对象(此处为this
)传递给g
方法才能访问A
的数据。例如。通过参数:
void f()
struct B
void g(const A& a)
printf("%d", a.t); //using t
;
B b;
b.g(*this);
【讨论】:
【参考方案3】:本地类B
的实例不包含类A
的对象的任何方面。为了在B::g()
中访问A
的成员变量,您必须将指针/引用传递给A
到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);
;
【讨论】:
以上是关于如何在方法中使用本地类中的类成员?的主要内容,如果未能解决你的问题,请参考以下文章