2012-07-28 56 views
2

的代碼:獲得私有內部類到主

class Vec 
{ 
public: 
    Vec() {len=0;}; 
    Vec(int n); 
    ~Vec(); 
    void setValue(int idx,int v); 
    void printVec() const; 
private: 
    class Items 
    { 
     friend class Vec; 
     Items(){value = 0;}; 
     Items(int v){value = v;}; 
     int value; 
    }; 
    int len; 
    Items *vec; 
}; 

/*Declare the member functions & constructor & destructor*/ 

int main() 
{ 
    Vec vector(5); 
    vector.printVec(); 
    for(int i=0;i<5;i++){ 
     vector.setValue(i,i); 
     vector.printVec(); 
    } 
    Items n; 
    return 0; 
} 

當我嘗試使用Items n;,我得到一個錯誤:「未申報的項目」。

但在使用時vector.Items n;,還是錯誤是「無效使用class Vec::Items

我怎樣才能讓編譯器識別的聲明?

回答

2

I wanna make it can be declared.

您需要使Items公共嵌套的或內部類Vec類的,然後使用範圍分辨率算子(即,Vec::Items)創建對象類型的實例時。否則,只能在Vec的方法內創建一個Vec::Items對象的實例,因爲它將是Vec的私有內部類,而不是可公開訪問的類類型。

+0

thx for andswr! – 2012-08-01 15:04:22