0

首先,我在 2 个文件(.h 和 .cpp 文件)中有 2 个类,Create.hAI.h

Create.h 中有这个结构:

public:
    struct Cell
        {
            int row;
                int column;
            vector<Cell*> neighbors;
            State state;
        };

这是枚举类 State(存储在 Create.h 文件中):

enum class State : char
{
     visited,
     empty
};

在 AI.h 中,我有一个堆栈和一个 Create 对象,如下所示:

private:
    deque<Create::Cell*> path;
    Create obj;

在 AI.cpp 中有一个名为obj的实例,它包含一个 Cell 的 2D 数组,其中每个 Cell 都有适当设置的行、列、状态和邻居。

构造函数:

AI::AI(Create createObj)
: obj(createObj)
{
    start = &obj.array[1][1];
}

我也有一个这样的函数,它以参数开头start

void AI::Function(Create::Cell* cell)
{
    path.push_back(cell);
    cell->state = State::visited;

    while (expression)
    {
        cell = path.back();
        cell->state = State::visited;

        for (int i = 0; i < cell->neighbors.size(); i++)
        {
            if (cell->neighbors[i]->state == State::empty)
            {
                path.push_back(cell->neighbors[i]);
            }
        }
    }
}

所以基本上路径堆栈中的单元格首先指向 obj.array[1][1] 并正确设置它(我已经确认它实际上指向我想要的位置)但是当我从堆栈中检索一个单元格时不指向 obj.array。

我想要做的是设置每个单元格的邻居的状态,但我设法在路径堆栈上设置状态,在单元格本身上而不是在 obj 实例内的数组上。

我绝对可以做的并且有效的方法是在单元格下设置 obj.array[i][j],如下所示:

cell = path.back();
cell->state = State::visited;
obj.array[cell->row][cell->column].state = State::visited;

我想知道的是是否有办法(通过我假设的指针)使 obj.array Cell 元素知道它是由cell->state = State::visited;设置的。

4

0 回答 0