2013-04-18 81 views
0

我試圖找到一個錯誤的底部,我想知道你能幫忙嗎?目前我對數組指針有點問題。我有三個班,一個家長和兩個孩子可以這麼說。其中一個孩子有一個類型爲struct的2D數組,我試圖從另一個孩子訪問這個元素。指向類中的多維數組

我在想,這段代碼對於我的數組指針是否有效,格式和語法是否正確? OChild1創建並填充2D數組,我在Parent中保存一個指向該指針的指針,並將該指針傳遞給OChild2,然後計劃使用數組的內容進行進一步處理。

struct BOARDTILE 
{ 
    float fPosX; 
    float fPosY; 

    BOARDTILES() 
    { 
     fPosX = 0.0f; 
     fPosY = 0.0f; 
    } 
}; 

class CChild1 
{ 
    public: 
     BOARDTILE BoardTileArray[18][18]; 

    CChild1() 
    { 
    } 

    writeBoardTileArray() 
    { 
     for (int i = 0; i <= 17; i++) 
     { 
      for (int j = 0; j <= 17; j++) 
      { 
       BoardTileArray[i][j].fPosX = (float) i * 5.0f; 
       BoardTileArray[i][j].fPosY = (float) j * 7.0f; 
      } 
     } 
    } 
}; 

class CChild2 
{ 
    public: 
     BOARDTILE (*pBoardTileArray)[18][18]; 
     float fPosX; 
     float fPosY; 

    CChild2() 
    { 
    } 

    void readBoardTileArray() 
    { 
     for (int i = 0; i <= 17; i++) 
     { 
      for (int j = 0; j <= 17; j++) 
      { 
       fPosX = (*pBoardTileArray[i][j]).fPosX; 
       fPosY = (*pBoardTileArray[i][j]).fPosY; 
       cout << fPosX; 
       cout << fPosY; 
      } 
     } 
    } 

}; 

class CParent 
{ 
    public: 
     BOARDTILE (*pBoardTileArray)[18][18]; 
     CChild1 OChild1; 
     CChild2 OChild2; 

    CParent() 
    { 
     OChild1.writeBoardTileArray(); 
     pBoardTileArray = &(OChild1.BoardTileArray); 
     OChild2.pBoardTileArray = pBoardTileArray; 
    } 
}; 

回答

1

要存儲二維數組的地址,您將需要一個指向指針,

沒有的typedef:
你將宣佈一個成員指針:

BOARDTILE (*pBoardTileArray)[18]; 

然後在構造函數中,你會寫:

pBoardTileArray = OChild1.BoardTileArray; 

但是,正如你所看到的那樣,它使代碼變得複雜。使用typedef可以簡化它:

用typedef:(推薦方式)
隨着typedef你可以寫在全球範圍內執行以下操作:

typedef BOARDTILE BOARDTILE_ar18_t[18]; 

,然後你可以聲明成員指針爲:

BOARDTILE_ar18_t* pBoardTileArray; 
+0

感謝您的回覆。所以,我是否需要在 之上寫上「BOARDTILE(* pBoardTileArray)[18] [18];」作爲BOARDTILE(* * pBoardTileArray)[18] [18]的 ; 取而代之? 或者「BOARDTILE *(* pBoardTileArray)[18] [18];」? 如果我聲明它爲BOARDTILE ** pBoardTileArray; 我似乎得到一行轉換錯誤: pBoardTileArray =&(OChild1.BoardTileArray); 您是否有鏈接到我可以瞭解更多關於此的頁面? – Moph 2013-04-18 03:59:26

+0

或者... BOARDTILE(*(* pBoardTileArray)[18])[18]; ? – Moph 2013-04-18 05:12:57

+0

查看我更新的答案。 – Ali 2013-04-18 06:28:56