Как использовать член класса в локальном классе в методе? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть такой класс:

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). Но как я могу поймать их или подружиться с А и Б? (Если это возможно)

Ответы [ 3 ]

0 голосов
/ 25 октября 2019

Экземпляр локального класса B не содержит никаких аспектов объекта класса A. Чтобы получить доступ к переменным-членам A в B::g(), вам нужно будет передать указатель / ссылку на экземпляр 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);
      }
};
0 голосов
/ 25 октября 2019

Определение B внутри метода A не приводит к тому, что экземпляры 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);
    }
};
0 голосов
/ 25 октября 2019

Вам необходимо передать A объект (this здесь) методу g, чтобы получить доступ к данным A. Например, через параметр:

 void f()
 {
  struct B
  {
   void g(const A& a)
   {
    printf("%d", a.t); //using t
   }
  };
  B b;
  b.g(*this);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...