gpt4 book ai didi

c++ - 表达式必须是带有枚举的可修改左值

转载 作者:行者123 更新时间:2023-11-28 05:03:42 24 4
gpt4 key购买 nike

当我尝试分配一个枚举值时,我的 C++ 程序很糟糕。当我尝试将 WallFree 等分配给 sokoban.board[j,i] 时出现错误。

bool loadLevel(ifstream &stream, tSokoban &sokoban, int level) {
bool ok = false;
string levelStr, levelFile = " ", prove;
int j = 0;
levelStr = "Level " + to_string(level);
while (levelFile != levelStr && EOF) {
getline(stream, levelFile);
}
if (levelFile == levelStr) {
ok = true;
getline(stream, prove);
sokoban.ncol = prove.size();
while (prove != "Level " + to_string(level + 1)) {
for (int i = 0; i < prove.size(); i++) {
switch (prove[i]) {
case '#':
sokoban.board[j, i] = Wall;
break;
case ' ':
sokoban.board[j, i] = Free;
break;
case '$':
sokoban.board[j, i] = Box;
break;
case '.':
sokoban.board[j, i] = GoalFree;
break;
case '@':
sokoban.board[j, i] = Player;
break;
}
}
getline(stream, prove);
j++;
}
sokoban.nrows = j - 1;
}
return ok;
}

很难知道问题出在哪里,因为这些是声明:

   typedef tTile tBoard[MAX][MAX];
typedef struct {
tBoard board;
int nrows;
int ncol;
int rowPlayer;
int colPlayer;
int numBoxes;
int goalBoxes;
}tSokoban;
typedef struct {
tSokoban sokoban;
int numMoves;
string nFileName;
int level;
}tGame;

如果我在代码中写入:sokoban.board[j,i] 这个错误消失了,谁能告诉我为什么会出现这个错误?

很抱歉,我不知道如何正确使用这个任务。

最佳答案

数据成员

tBoard board;

由于 typedef 而具有数组类型 tTile[MAX][MAX]

typedef tTile tBoard[MAX][MAX];

因此,要访问二维数组的元素,您应该使用像这样的后缀表达式

sokoban.board[j][i] = Wall;

其中表达式 sokoban.board[j][i] 产生 tTile 类型的左值。

至于这个表达

sokoban.board[j, i] = Wall;

然后在方括号中使用了逗号运算符。实际上相当于

sokoban.board[i] = Wall;

表达式 sokoban.board[i] 具有一维数组类型 tTile[MAX](请参阅上面的 typedef)并且不是可修改的左值。

关于c++ - 表达式必须是带有枚举的可修改左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45331478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com