Попытка ссылки на удаленную функцию (ссылка на функцию не создана) - PullRequest
0 голосов
/ 20 января 2019

У меня возникла проблема в тот момент, когда, по-видимому, я Attempting to reference a deleted function.Насколько я понимаю, я на самом деле не ссылаюсь на функцию, а на умный указатель на структуру.

Это университетский проект, в котором используются несколько заголовочных файлов и файлов CPP, чтобы мы могли понять, какиспользовать несколько файлов в одном проекте и связывать их вместе с пониманием и использованием полиморфизма.Мы используем несколько файлов в качестве кратких заявлений, которые мы должны.Файлы и определения были предоставлены для нас.

Предполагается, что следующее должно выполнить поиск в ширину на карте местности (массив чисел в диапазоне от 0-3) от начального местоположения до местоположения цели,Речь идет о поиске пути.

Это то, что у меня есть до сих пор:

#include "SearchBreadthfirst.h" // Declaration of this class
#include <iostream>
#include <list>
using namespace std;

bool CSearchBreadthFirst::FindPath(TerrainMap& terrain, unique_ptr<SNode> start, unique_ptr<SNode> goal, NodeList& path)
{
    // Initialise Lists
    NodeList closedList;    // Closed list of nodes
    NodeList openList;      // Open list of nodes
    unique_ptr<SNode>currentNode(new SNode);    // Allows the current node to be stored
    unique_ptr<SNode>nextNode(new SNode);       // Allows the next nodes to be stored in the open list

    // Boolean Variables
    bool goalFound = false; // Returns true when the goal is found

    // Start Search
    openList.push_front(move(start)); // Push the start node onto the open list

    // If there is data in the open list and the goal hasn't ben found
    while (!openList.empty() || goalFound == false)
    {
        cout << endl << "Open list front:" << openList.front() << endl;
        currentNode->x = openList.front()->x;
        currentNode->y = openList.front()->y;
        currentNode->score = openList.front()->score;
        currentNode->parent = openList.front()->parent;
    }
}

Выделение этой строки: currentNode->x = openList.front()->x; как проблема.

The *Тип 1014 * определен в SearchBreadthfirst.h следующим образом:

using NodeList = deque<unique_ptr<SNode>>;

SNode также определен в SearchBreadthfirst.h как:

struct SNode
{
  int x;             // x coordinate
  int y;             // y coordinate
  int score;         // used in more complex algorithms
  SNode* parent = 0; // note use of raw pointer here
};

Программа ломается при сборке.Я уже несколько дней пытаюсь обернуть это вокруг головы, поэтому любая помощь очень ценится.Если я что-то пропустил, дайте мне знать, и я добавлю это!

Джеймс

1 Ответ

0 голосов
/ 20 января 2019

Сообщение об ошибке Attempting to reference a deleted function связано с тем, что std::unique_ptr явно delete является его конструктором копирования, поскольку очевидно, что в нем должна быть только одна копия указателя.

Когда вы звоните

openList.push_front(start);

Вы создаете копию start, которая имеет тип unique_ptr<SNode>, и у нее есть конструктор удаленных копий. Чтобы использовать std::unique_ptr с контейнером, вам необходимо переместить объект в контейнер. Вам нужно сделать что-то вроде этого:

openList.push_front(move(start));

Это переместит start в deque и переместит то, что было там, в start.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...