循环中分配的多维数组说明:表达式必须是可修改的左值
Posted
技术标签:
【中文标题】循环中分配的多维数组说明:表达式必须是可修改的左值【英文标题】:Multidimensional array assigning in loop stating: expression must be a modifiable lvalue 【发布时间】:2018-01-30 06:51:13 【问题描述】:所以在一个类中,我有一个这样的数组:
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
我不确定我在这里做错了什么。此代码位于该类的方法之一中,因此它可以访问它。我到处找遍了,但我找不到他们使用带有简单整数赋值的二维数组的示例。
感谢您的帮助!
编辑:请求了更多代码,所以我们开始吧:
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 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();
;
【问题讨论】:
不是您的错误的确切原因,但我认为您的意思是if (i == iX1)
而不是 if (i = iX1)
需要查看更多代码。错误不在您发布的代码行中(即使错误消息是)。
@john 我已按要求添加了更多代码。
@liliscent 哦。是的。就是这样......我现在觉得自己很愚蠢。
【参考方案1】:
void Grid::placeBoat(int iX1, int iY1, int iX2, int iY2) const
看到定义末尾的const
了吗?这意味着您可以在实例(Grid
)为常量时调用此方法。
由于您允许该调用,因此将编译整个函数体,假设 this
的类型为 const Grid *
。
然后您尝试更改数组,它是 (const) Grid 的成员,因此编译器错误。
【讨论】:
【参考方案2】:问题在于,在 const 方法中,您试图修改对象。去掉常量
class Grid
...
void placeBoat(int, int, int, int);
...
;
void Grid::placeBoat(int iX1, int iY1, int iX2, int iY2)
...
【讨论】:
以上是关于循环中分配的多维数组说明:表达式必须是可修改的左值的主要内容,如果未能解决你的问题,请参考以下文章