2014-01-15 55 views
0
class A 
{ 
     class B 
     { 
       int x; 
     } 

public: 
     void printX() { std::cout << ????; } 
} 

如何从A类函数访问x变量?我不能让它静态...嵌套类的访问成员

我试过一切,但它要么告诉我我需要一个对象才能访问它或编译器没有找到该函数。

+0

除非它是一些如何分配(静态或B实例存在),否则不会这是一种方式,因为它在运行时并不实际存在(或者在编译时,除了声明它之外)。 – Corbin

回答

2

,要么告诉我,我需要一个对象[... ]

想一想。因为这正是问题所在。

如果你实例化一个A,,你也不会得到B。嵌套类不是封闭类的成员变量。这实际上只是改变类的命名空间的另一种方式。

所以,你需要一个B的实例。也许是A的成员?

class A 
{ 
     class B 
     { 
     public: 
       int x; 
     } mB; 

public: 
     void printX() { std::cout << mB.x; } 
}; 
1

你永远不要声明B类里面答:您需要做这样的事情的实例

class A 
    { 
      class B 
      { 
      public: 
        int x; 
      }; 

      B b; 

    public: 
      void printX() { std::cout << b.x; } 
    }; 
0

你不知道。您确实需要一个对象才能使用x变量。不过,你可以把它变成静态的。你的例子的问题是x不公开。将B置于A内不会使B成为A的一部分,它只会改变B的范围。

从这个例子中,它看起来像是在继承之后。这会给你后面的效果(访问所有B的方法和变量而不用制作对象)。

Class B 
{ 
protected: 
    int x; 
} 
Class A : B 
{ 
    void printX() { std::cout << x; } 
}