уникальный указатель в связанном стеке

0

Итак, перейдя из Linked List, мне теперь нужно построить Linked Stack, который, я думаю, в значительной степени похож на него. Тем не менее, я получаю ошибку доступа, заявляя, что не может получить доступ к закрытому члену, которого я не понимаю, поскольку я вообще не пытался получить доступ к каким-либо частным членам...

LinkNode.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
Теги:
pointers
linked-list
stack
unique

1 ответ

1

Даже если вы не прямой доступ к unique_ptr, конструктор копирования по умолчанию LinkedNode имеет доступ к нему. Теперь unique_ptr можно перемещать, но не копировать.

Вы должны определить свой собственный экземпляр ctor таким образом, чтобы вы воссоздали unique_ptr из содержимого, указанного вместо этого, путем прямого построения одного путем копирования старого.

Это должно помочь вам.

  • 0
    Не могли бы вы объяснить немного подробнее в этом? Я читал пост, который вам дали, и играл с моим кодом, но он все еще не работает ....
  • 0
    Я редактирую код

Ещё вопросы

Сообщество Overcoder
Наверх
Меню