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

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 的成员变量,您必须将指针/引用传递给AB::g() 的实例。

class A

   protected:

      int t = 10;

   public:

      void f()
      
         struct B
         
            void g(A* a)
            
               print(a->t);
            
         ;
         B b;
         b.g(this);
      
;

【讨论】:

以上是关于如何在方法中使用本地类中的类成员?的主要内容,如果未能解决你的问题,请参考以下文章

java中的四种访问权限是?

如何访问其子类中的类的私有变量?

C ++继承类具有同名成员

c# 的类成员

如何在C#中,在一个类里调用另外一个类的方法

review07