【发布时间】:2017-02-28 14:37:06
【问题描述】:
我正在尝试为我的单列双端队列实现一个 insertfront() 函数,但我一直遇到同样的问题。
我相信这是由于运算符的重载=
Deque& operator=(const Deque&){return *this;};
为了使分配工作,它需要操作数 A 是 Deque 类型的引用,操作数 B 是 Deque 类型的另一个引用,但我不确定如何实现这一点,因为我尝试执行 head& = new_node& 和遇到更多错误。
Deque.cpp||In member function 'void Deque::insert_front(int)':|
Deque.cpp|21|error: use of deleted function 'std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Node; _Dp = std::default_delete<Node>]'|
/usr/include/c++/6/bits/unique_ptr.h|357|note: declared here|
这是我的功能
#include "Deque.h"
#include <iostream>
#include <memory>
#include <utility>
using std::cout;
using std::endl;
using std::move;
void Deque::insert_front(int a)
{
std::unique_ptr<Node> new_node;
new_node->val = move(a);
new_node->next = move(head);
head = move (new_node);
}
双端队列.h
#include "Node.h"
#include <memory>
class Deque{
public:
Deque() = default;
Deque(const Deque&);
~Deque(); //must use constant space
Deque& operator=(const Deque&){return *this;};
void insert_front(int);
private:
friend Node;
//Sentinel
std::unique_ptr<Node> head ;
std::unique_ptr<Node> tail ;
};
节点.h
#ifndef NODE_H
#define NODE_H
#include <iostream>
#include <memory>
class Node {
public:
Node(const Node& n) : val{n.val}, next{}
{
}
Node(int v, std::unique_ptr<Node> n) : val{v}, next{move(n)}
{
}
Node(int v) : val{v}
{
}
private:
int val = 0;
std::unique_ptr<Node> next = nullptr;
friend class Deque;
friend std::ostream& operator<<(std::ostream&, const Node&);
};
#endif
【问题讨论】:
-
您还需要将
new_node移动到head。 -
啊,对了,忘记粘贴了。 - 我很确定这是我的问题?你能把它作为答案,所以我可以给你答案点吗? :P
标签: c++ pointers compiler-errors linked-list smart-pointers