循环中的多维数组分配声明:表达式必须是可修改的左值

Multidimensional array assigning in loop stating: expression must be a modifiable lvalue

所以在 class 中,我有一个这样的数组:

public:
    int playGrid[10][10];//size of the grid, 10x10 or 100 squares

当我这样做时:

        for (int i = iX1; i < iX2; i++)
        {
            if (i == iX1)
            {
                playGrid[i][iY1] = 4;
            }
        }

这个:

playGrid[i][iY1] = 4;

给我:

expression must be a modifiable lvalue

我不确定我做错了什么。此代码位于 class 的方法之一内,因此它可以访问它。我找遍了所有地方,但我无法找到他们使用具有简单整数赋值的二维数组的示例。

感谢您的帮助!

编辑:请求了更多代码,所以我们开始:

void Grid::placeBoat(int iX1, int iY1, int iX2, int iY2) const
{
    if (iX1 != iX2)
    {
        if (iX1 < iX2)
        {
            for (int i = iX1; i < iX2; i++)
            {
                if (i == iX1)
                {       
                    playGrid[i][iY1] = 4;
                }
            }
        }
        else
        {

        }
    }
    else if (iY1 != iY2)
    {

    }
}

这是网格 class:

class Grid
{
public:
    int playGrid[10][10];//size of the grid, 10x10 or 100 squares
    void drawGrid() const;
    void placeBoat(int, int, int, int) const;
    Grid();
    ~Grid();
};

问题是您试图在 const 方法中修改对象。删除 const

class Grid
{
    ...
    void placeBoat(int, int, int, int);
    ...
};

void Grid::placeBoat(int iX1, int iY1, int iX2, int iY2)
{
    ...
}
void Grid::placeBoat(int iX1, int iY1, int iX2, int iY2) const

看到定义末尾的const了吗?这意味着您可以在实例 (Grid) 为常量时调用此方法。

由于您允许该调用,因此编译整个函数体时假定 this 的类型为 const Grid *

然后您试图更改数组,它是 (const) Grid 的成员,因此出现编译器错误。