2014-01-15 121 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; } 
}