gpt4 book ai didi

带有对象指针的 C++ vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:41 28 4
gpt4 key购买 nike

我必须用 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);

但是在这个 push 之后,对象中的所有值都是错误的。即使我尝试

neighbour = stack.back();

所有的值都完全不同

我已经发布了一些关于这个主题的帖子,这就是为什么我选择了一个指针 vector 而不是对象的原因。

我的错在哪里?

编辑:根据要求提供更多片段:

当然是给mate本身分配内存

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:
};

最佳答案

因为您没有发布获取值的代码,与此进行比较,并尝试找出您的问题...

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] 压入已访问 vector

    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];
}

关于带有对象指针的 C++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8725543/

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