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

标签 c++ arrays enums lvalue

当我尝试分配一个枚举值时,我的 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/

相关文章:

java - Java 中的可变大小数组初始化

C# 7.3 枚举约束 : Why can't I use the nullable enum?

c++ - 没有 main() 的程序?

c++ - 具有复杂类型且 N=256/large 的 std::array<T, N>

javascript - 迭代具有最大值限制的数组并返回

javascript - 通过 ajax 将数组从 PHP 移动到具有有效 JSON 格式的 JS

java - Java-捕获带有枚举的用户输入时出错

c# - 枚举的版本

c++ - 在没有图像文件本身作为源的情况下在 qt 窗口中有一个图像

c++ - 是否有任何特殊的 C++ 函数来获取数组所有元素的异或?