对我的 BFS 磁贴中的引用和指针感到困惑 class

Confused about references and pointers in my BFS tile class

我目前正在编写要在我的 BFS 算法中使用的 Tile class。我需要一个 cameFrom 变量来跟踪我遍历网格时图块的来源。它不应该在一开始就被初始化,因为我们不知道它一开始是从哪里来的。随着我运行通过我的BFS算法,它会不断更新。

Error 1 error C2758: 'Tile::cameFrom' : a member of reference type must be initialized

有人知道哪里出了问题吗?

这是我的 Tile.hpp:

#ifndef _TILE_H
#define _TILE_H

class Tile
{
    public:

        Tile(int x, int y);

        ~Tile();

        int GetX();

        int GetY();

        bool IsWall();

        bool IsVisited();

        void SetCameFrom(Tile& cameFrom);

        Tile& GetCameFrom();

        void ToggleWall();

        void ToggleVisited();

    private:

        int x;
        int y;
        bool isWall;
        bool isVisited;
        Tile& cameFrom;

};

#endif

我的Tile.cpp:

#include "Tile.hpp"


Tile::Tile(int x, int y) {

    this->x = x;
    this->y = y;
    this->isWall = false;
    this->isVisited = false;

}

Tile::~Tile() {}

int Tile::GetX() {

    return x;

}

int Tile::GetY() {

    return y;

}

bool Tile::IsWall() {

    return isWall;

}

bool Tile::IsVisited() {

    return isVisited;

}

void Tile::SetCameFrom(Tile& cameFrom) {

    this->cameFrom = cameFrom;

}

Tile& Tile::GetCameFrom() {

    return cameFrom;

}

void Tile::ToggleWall() {

    isWall = !isWall;

}

void Tile::ToggleVisited() {

    isVisited = true;

}

不应该一开始就初始化,因为我们不知道一开始它是从哪里来的

那你就只能用指针了,因为引用必须被初始化为某物。当您在 pointerreference.

之间进行选择时,请始终问以下三个问题
  • 我需要在声明时执行初始化的东西吗?

  • 我需要让它在它的生命周期中引用其他变量(赋值)吗?

  • 我是否需要使该对象指向 NULL。

如果对任何一个问题的回答是肯定的,那么选择其他指针参考。

首先必须初始化引用,所以你必须在构造函数中设置它。其次,您不能重新分配参考,因此您的 SetCameFrom 函数将不起作用。为此使用指针。

Tile * cameFrom;

但在构造函数中将指针初始化为 0(或 C++11 中的 nullptr)也很好。

Tile::Tile(int p_x, int p_y):
    x(p_x), 
    y(p_y),
    cameFrom(0),
    isWall(false),
    isVisited(false)
{
}