Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;带对象指针的向量 我必须在C++中实现一个简单的小游戏(迷宫),现在我遇到了一些问题。_C++_Pointers_Vector - Fatal编程技术网

c++;带对象指针的向量 我必须在C++中实现一个简单的小游戏(迷宫),现在我遇到了一些问题。

c++;带对象指针的向量 我必须在C++中实现一个简单的小游戏(迷宫),现在我遇到了一些问题。,c++,pointers,vector,C++,Pointers,Vector,一些片段: 我有一个对象指针数组,代表迷宫中的字段 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]-&

一些片段: 我有一个对象指针数组,代表迷宫中的字段

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;
    }
}
但是在这个推送之后,对象中的所有值都是错误的。 即使我尝试

neighbour = stack.back();
所有的值都完全不同

关于这个主题,我已经发了一些帖子,这就是为什么我选择了指针向量而不是对象向量

我的错在哪里

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

当然,我会为配偶分配内存

this->maze = new Field**[MAZE_WIDTH];
字段是一个简单的类,如下所示:

class Field {
public:
    Field();
~Field();
bool w_left;
bool w_right;
bool w_front;
bool w_back;
unsigned int x;
unsigned int y;
private:
};

为什么要将迷宫声明为
字段***


C++的替代方案是:代码> STD::向量迷宫;<代码>,这是您应该使用的。

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

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;
std::向量迷宫;
//伊尼
对于(int i=0;ix=i;
迷宫[i][j]>y=j;
}
}
性病媒访问;
//将字段[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];      
    }
访问。推回(迷宫[4][5]);
//清理
对于(size_t i=0;i
是否每次添加到堆栈时都会修改相同的字段引用?这将导致所有的值都相同,并且等于最后添加的值。您能再提供一点代码吗?例如,
邻居的类型是什么?它是如何初始化的?(听起来您可能正在将指向局部变量的指针插入
向量
,但如果没有更多的代码,则无法确定。)可能是代码片段,但您是否错过了开头的
新字段**[]
?此外,我认为处理多维数组的方法比处理指向指针的指针更简单。·1一个明显的错误是没有为
迷宫
指针分配任何内容。另一个大错误是将指针放在首位。这样做的人通常被称为“三个srtar程序员。使用例如
std::vector
。关于你的问题似乎是关于什么的,即为什么事情不起作用,考虑到你提供的信息,似乎不可能有真正的答案。它的方向是“我的程序不起作用,这里有一些无关的bug,我剩下的虫子是什么?”至少可以说,这很难回答。干杯,在C程序中你应该永远不需要
***
;更不用说C++了。或者,代码> STD::向量迷宫<代码>,如果C++ 11可用,或者用<代码> Boo::SyrdypTr> /Cudio> <代码>:ST1::SyrdYpPTR <代码>,如果不是,那么更好:MaZeH高度和MaZeSuffe似乎是常数= >字段迷宫[MAZEZHEX] [MAZEHIGH]。然后,当需要插入向量堆栈时,将_向后推(&maze[x][y]);我像你说的那样声明了迷宫,但是当我尝试
堆叠时仍然会遇到相同的错误。推回(邻居)
@skelle:邻居是分配了新的还是在堆栈上是的,我也以这个解决方案结束了
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;
    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];      
    }