0
列挙型の値を代入しようとすると、C++でひどいプログラムがあります。 Wall
またはFree
などを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]
このエラーがdissapeared、このエラーが起こる理由を誰も私を言うことができますか?
この混乱については申し訳ありませんが、このタスクを正しく使用する方法はわかりません。
clunkyな 'switch'の代わりに' std :: map'を使った簡単なルックアップテーブルはありませんか? – tadman
@ÁlvaroSánchezsokoban.board [j] [i] –
'sokoban.board [j、i]'は2次元配列へのアクセス方法ではありません。 'some_name [] []'で定義すると、 'some_name [] []'でアクセスします。 – NathanOliver