0
votes

Comment utiliser un membre d'une classe dans une classe locale dans une méthode?

J'ai une classe comme ceci:

ERROR: a nonstatic member reference must be relative to a specific object


0 commentaires

3 Réponses :


0
votes

Vous devez passer A code> objet ( ceci code> ici) à g code> méthode pour pouvoir accéder à A code> Data. Par exemple. VIA Paramètre:

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


0 commentaires

0
votes

Une instance de la classe locale B code> ne contient aucun aspect d'un objet de la classe A code>. Afin d'accéder aux variables des membres de A code> dans b :: g () code>, vous devrez transmettre un pointeur / référec sur une instance de A Code> to B :: g () code>.

class A
{
   protected:

      int t = 10;

   public:

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


0 commentaires

0
votes

Définition de B code> à l'intérieur d'une méthode de A code> ne fait pas d'instances de A code> contenant un B code>.

Peu importe où vous définissez une classe, vous avez besoin d'une instance pour appeler une méthode non statique. Faire des amis ne suffirait pas non plus, parce que vous avez toujours besoin d'une instance code>, que vous devez passer à B code> d'une manière ou d'une autre: p>

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 commentaires