2013-04-18 80 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