C++ 试图引用已删除的函数(未引用函数)

C++ 试图引用已删除的函数(未引用函数),c++,function,reference,C++,Function,Reference,我现在遇到一个问题,显然我正在尝试引用一个已删除的函数。就我所见,我实际上并没有引用一个函数,而是一个指向结构的智能指针 这是一个大学项目,使用多个头文件和CPP文件,让我们了解如何在同一项目中使用多个文件,并将它们链接在一起,同时了解和利用多态性。我们必须使用多个文件作为简要说明。文件和定义是为我们提供的 以下内容旨在对从起始位置到目标位置的地形图(数字数组范围为0-3)进行“宽度优先”搜索。它是关于寻路的 这就是我到目前为止所做的: #include "SearchBreadthfirst.

我现在遇到一个问题,显然我正在
尝试引用一个已删除的函数
。就我所见,我实际上并没有引用一个函数,而是一个指向结构的智能指针

这是一个大学项目,使用多个头文件和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;
    }
}
该程序在构建时中断。几天来我一直在努力解决这个问题,所以非常感谢您的帮助。如果我遗漏了什么,请告诉我,我会把它加进去的


James

试图引用已删除函数的错误消息
是因为
std::unique_ptr
显式地
delete
s它的副本构造函数,因为显然,它所包含的指针只有一个副本

当你打电话的时候

openList.push_front(start);
您正在创建
start
的副本,该副本的类型为
unique\u ptr
,并且它有一个已删除的副本构造函数。要对容器使用
std::unique_ptr
,需要将对象移动到容器中。您需要这样做:

openList.push_front(move(start));

这将移动
start
deque
中,并将其中的内容移动到
start

中作为开始,
CSearchBreadthFirst
TerrainMap
unique\u ptr
未定义。抱歉,它们在另一个头文件中定义。我的坏消息为什么你有多个文件?请准备一份道歉信。我已经更新了问题。这是一个大学项目,这些文件交给我们使用。我们使用它们是简要说明的一部分。第一封书信,所以我读了这个问题。真的很高兴。我以前试过这个,同样的错误仍然发生。我只是在本地编译了它,这为我修复了错误。不过,在
cout
行中,我确实遇到了一个不同的错误。那是因为没有
操作符trange。最初我实际上使用了
move()
,但因为它不起作用,所以我尝试了不用它。
cout
行上的错误我理解,一旦这一点起作用,我将着手解决。非常奇怪的是,似乎通过值将
unique_ptr
传递给函数会产生相同的错误,不是吗?是的,会。您需要发送一个
常量unique\u ptr&
。(如果要修改它,我想是非常量。)
openList.push_front(move(start));