c++ - 链接堆栈中的唯一指针

标签 c++ pointers linked-list stack unique

因此,从链表开始,我现在必须构建一个链栈,我认为它与它非常相似。但是,我收到一个访问错误,说无法访问我不理解的私有(private)成员,因为我根本没有尝试访问任何私有(private)成员....

链接节点.h

#include <iostream>
#include <memory>
using namespace std;

template <class T>
class LinkedNode 
{

    public:

        LinkedNode(T newElement, unique_ptr<LinkedNode<T>> newNext):element(newElement), next(newNext ? new LinkedNode<T>newNext : nullptr)
        {
        }

        T GetElement() {return element;}

        void SetElement(T x) {element = x;}

        unique_ptr<LinkedNode<T>> newNext() {return next;}

        void SetNext(unique_ptr<LinkedNode<T>> newNext) {next = newNext;}

    private:
        T element;
        unique_ptr<LinkedNode<T>> next;
};

CompactStack.h

#pragma once
#include"LinkedNode.h"

using namespace std;

template <class T>
class CompactStack 
{

    public:

        CompactStack() {}
        bool IsEmpty() const { return head == 0; }

        T Peek() 
        {
            assert(!IsEmpty());
            return head-> GetElement();
        }

        void Push(T x) 
        {
            unique_ptr<LinkedNode<T>> newhead(new LinkedNode<T>(x, head));
            head.swap(newhead);
        }

        void Pop() 
        {
            assert(!IsEmpty());
            unique_ptr<LinkedNode<T>> oldhead = head;
            head = head->next();
        }

        void Clear() 
        {
            while (!IsEmpty())
            Pop();
        }

    private:
        unique_ptr<LinkedNode<T>> head;
};

这是我从编译器那里得到的错误

Error   1   error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>' e:\fall 2013\cpsc 131\hw4\hw4\hw4\compactstack.h    23

最佳答案

即使您没有直接访问 unique_ptrLinkedNode 的默认复制构造函数也会访问它。现在,unique_ptr 可以移动但不能复制。

您必须定义自己的复制构造函数,以便从指向的内容重新创建 unique_ptr,而不是通过复制旧的直接构造一个。

This应该对你有帮助。

关于c++ - 链接堆栈中的唯一指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19236487/

相关文章:

c++ - 多重间接的限制

c - 内存泄漏与否 - 链表

c++ - C++ 中的通用函数包装器是否可行?

c++ - 如何在 C++ 中使用通用引用参数为模板类编写构造函数

c++ - 假设 time_t 以秒为单位有多安全?

C 为什么 void 指针不能存储浮点值?

c++ - 建议将 cpp 代码转换为 UML 类图的工具

C 中的字符连接

java - Java 链表数组

c++ - 尝试从链表返回数据时qt中的段错误