我必须在c ++(迷宫)中实现一个小而简单的游戏,我现在遇到了一些问题。
一些片段: 我有一个对象指针数组,代表迷宫中的字段
Field*** maze;
初始迷宫:
for (n = 0; n < MAZE_WIDTH; n++) {
this->maze[n] = new Field*[MAZE_HEIGHT];
for (p = 0; p < MAZE_HEIGHT; p++) {
this->maze[n][p] = new Field();
this->maze[n][p]->x = n;
this->maze[n][p]->y = p;
}
}
创建迷宫时,我需要一个已访问过的字段列表和一个堆栈 所以我做了:
std::vector<Field*> visited;
std::vector<Field*> stack;
然后我想将Field *放入我的堆栈
stack.push_back(neighbour);
但是在此推送之后,对象中的所有值都是错误的。 即使我尝试
neighbour = stack.back();
所有值都完全不同
我已经对这个主题提出了一些线索,这就是我选择指针而不是对象的原因。
我的错在哪里?
编辑: 根据要求提供更多片段:
当然我为配偶本身分配内存
this->maze = new Field**[MAZE_WIDTH];
Field是一个简单的类,看起来像:
class Field {
public:
Field();
~Field();
bool w_left;
bool w_right;
bool w_front;
bool w_back;
unsigned int x;
unsigned int y;
private:
};
答案 0 :(得分:2)
因为,您没有发布获取值的代码, 与此相比,并尝试找到你的问题......
std::vector<std::vector<Field*> > maze;
// Ini
for(int i = 0; i < MAZE_WIDTH; i++)
{
maze.push_back(std::vector<Field*>());
for(int j = 0; j < MAZE_HEIGHT; j++)
{
maze[i].push_back(new Field());
maze[i][j]->x = i;
maze[i][j]->y = j;
}
}
std::vector<Field*> visited;
//在访问过的向量中推送字段[4,5]
visited.push_back(maze[4][5]);
// Clean up
for(size_t i = 0; i < maze.size(); i++)
{
for(size_t j = 0; j < maze[i].size(); j++)
delete maze[i][j];
}
答案 1 :(得分:0)
为什么将迷宫声明为Field***
?
C ++替代方案是std::vector<std::vector<Field*> > maze;
,这就是你应该使用的。