c++ - 用细胞表示迷宫
问题描述
我试图表示 Maze 对象,它是一个矩形单元格网格,即 Cell 对象的二维数组。但我很困惑为什么我不能这样设置
m[1][1].setDown(false);
我会收到错误“arr 是私人成员”,但我在这里对单元格对象使用 settermmethod,所以它不应该工作吗?还有另一种更好的方法来表示迷宫内的 Cell 对象吗?
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<fstream>
#include<string>
#include <stack>
using namespace std;
class cell
{
private:
bool visited;
bool up, down, right, left;
int x, y;
int px, py;
char status;
public:
cell() {
up = down = right = left = 0;
x = y = 0;
status = ' ';
}
bool getUp() { return up; }
bool getDown() { return down; }
bool getRight() { return right; }
bool getLeft() { return left; }
bool getvisited() { return visited; }
void setUp(bool b) { up = b; }
void setDown(bool b) { down = b; }
void setRight(bool b) { right = b; }
void setLeft(bool b) { left = b; }
void setvisited(bool b=0) { visited = b; }
void setstatus(char s = ' ') { status = s; }
char getStatus() { return status; }
};
class Maze
{
private:
int row, col;
cell **arr;
public:
Maze(int r = 0, int c = 0)
{
this->row = r; this->col = c;
arr = new cell*[row];
for (int i = 0; i < row; i++)
arr[i] = new cell[col];
}
};
int main()
{
Maze m(5, 5);
m.arr[1][1].setLeft(true);
}
解决方案
一种解决方案是通过以下方式更改您的 Maze 公共声明来表示您的迷宫对象的更好方法:
public:
Cell GetCell(int r,int c) {
return arr[r][c];
}
然后在您的主要方法中将错误行更改为:
m.GetCell(1,1).setLeft(true);
推荐阅读
- ios - 从(英语到阿拉伯语)更改语言时如何从左到右更改 SWRaveal 侧菜单表单
- tabs - 即使在 Visual Studio 2017 中取消注释后,如何保持制表符缩进?
- python - 如何在 python 代码脚本中编码密码?
- python - 即使我事先设置了随机状态,为什么我的 cross_val_score 总是不同?
- database - 如何建模或查询关系代数中不存在的东西
- python - 如何以 Pythonic 方式将多个列表分组为单个列表?
- javascript - amp 页面停止工作。无法加载 cdn.ampproject.org 资源
- database - 如何将本地数据库数据与远程数据库同步?
- css - 可能的错误:stroke-linecap="round" 在动画时在 Firefox 中变形
- graphdb - GraphDB 8.9 查询监控:nsTotalSpentInNext 未显示