2012-01-28 169 views
1

我正試圖從內部類方法iterateForward訪問外部類變量cell[i][j]如何從C++的內部類訪問外部類對象

我不希望外部類的傳遞thisiterateForward作爲iterateForward(Matrix&),因爲它會在參數添加到iterateForward。

內部類的方法:

Pos Matrix::DynamicCellIterator::iterateForward(){ 
        .................... 
     (Example) outerRef.cell[i][j].isDynamic = true;   
        ..................... 
        } 

這裏是我的類:

class Matrix { 
     class DynamicCellIterator{ 
      Cell* currentCellPtr; 
      Matrix& outerRef; //This will be the key by which i'll get access of outer class variables 
     public: 
      DynamicCellIterator(Matrix&); 
       Pos iterateForward(); 
     }; 
     Cell cell[9][9]; 
     DynamicCellIterator dynIte(*this); // I have a problem of initializing the outerRef variable. 
     Error errmsg; 
     bool consistent; 


    public: 
     Matrix(); 
     Matrix(Matrix&); 
      ................ 
    } 


//Here I tried to initialize the outerRef. 
    Matrix::DynamicCellIterator::DynamicCellIterator(Matrix& ref){ 
     this->currentCellPtr = NULL; 
     this->outerRef = ref; 
    } 

我怎麼能初始化outerRef

+1

不知道你會得到錯誤的,但我會寫期矩陣:: DynamicCellIterator :: DynamicCellIterator(矩陣和REF):outerRef(REF){ – 2012-01-28 17:37:12

+0

的可能的複製[內部類可以訪問私有變量?](http://stackoverflow.com/questions/486099/can-inner-classes-access-private-variables) – 2016-10-31 23:18:07

回答

4

您需要在構造函數的初始化列表中初始化成員引用。併爲dynIte成員做同樣的事情:在outer的構造函數中初始化它。

事情是這樣的:

class Outer { 
    class Inner { 
     int stuff; 
     Outer &outer; 

     public: 
      Inner(Outer &o): outer(o) { 
       // Warning: outer is not fully constructed yet 
       //   don't use it in here 
       std::cout << "Inner: " << this << std::endl; 
      }; 
    }; 

    int things; 
    Inner inner; 

    public: 
     Outer(): inner(*this) { 
       std::cout << "Outer: " << this << std::endl; 
     } 
}; 
3

讓內部類的構造函數接受指向外部類的對象的指針,並將其存儲在數據成員中供以後使用。 (這實質上是Java在引擎蓋下自動執行的操作)。

+0

我只試過這個。但我在這一行中出現錯誤。 'DynamicCellIterator dynIte(* this);' – 2012-01-28 17:42:34

+0

@EAGER_STUDENT:您需要查看初始化列表。 – Puppy 2012-01-28 17:48:34

+0

@DeadMG你能告訴我嗎?DynamicCellIterator dynIte(* this);'無效?雖然我知道'this'指針只能用於函數,但我需要知道,'DynamicCellIterator dynIte(* this)'在邏輯上如何無效,以及它在初始化列表中的有效性如何。 – 2012-01-28 17:59:20

相關問題