带有对象指针的c++向量

c++ vector with object pointers

本文关键字:c++ 向量 指针 对象      更新时间:2023-10-16

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

然后我想在堆栈中放入一个字段*

stack.push_back(neighbour);

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

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

既然,你没有张贴你是如何获得值的代码,比较,找出你的问题…

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

为什么将迷宫声明为Field*** ?

c++的替代方案是std::vector<std::vector<Field*> > maze;,这就是你应该使用的