0

我正在尝试找出错误的根源,不知道您是否可以提供帮助?我现在对数组指针有点问题。我有三个班级,可以这么说,一位家长和两个孩子。其中一个孩子有一个 struct 类型的二维数组,我正在尝试从另一个孩子访问它的元素。

我想知道,这段代码对我的数组指针的格式/语法是否有效?OChild1 创建并填充二维数组,我在 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;
    }
};
4

1 回答 1

1

要存储二维数组的地址,您需要一个指向指针的指针,

如果没有 typedef:
您可以将成员指针声明为:

BOARDTILE (*pBoardTileArray)[18];

然后在构造函数中,你会写:

    pBoardTileArray = OChild1.BoardTileArray;

但正如您所见,它使代码变得复杂。使用typedef可以简化它:

使用 typedef:(推荐方式)
使用typedef您可以在全局范围内编写以下内容:

typedef BOARDTILE BOARDTILE_ar18_t[18];

然后您可以将成员指针声明为:

BOARDTILE_ar18_t* pBoardTileArray;
于 2013-04-18T03:47:03.803 回答