all을 사용하여 이중 연결 목록에서 노드의 데이터를 인쇄하려고 shared_ptr
하지만 인쇄 기능을 사용하여 데이터를 출력하면 프로그램이 충돌합니다. 인쇄하려고 할 때 충돌하는 이유를 모르겠습니다. 내 Insert
기능에 문제가있을 수 있습니까?
template <typename T>
class Node
{
private:
T data;
shared_ptr<Node<T>> next;
shared_ptr<Node<T>> prev;
public:
Node() { next = NULL; prev = NULL; data = 0; }
Node(T value) { next = NULL; prev = NULL; data = value; }
T getData() { return data; }
shared_ptr<Node<T>> getNext() { return next; }
shared_ptr<Node<T>> getPrev() { return prev; }
};
template <typename T>
class DoubleLinkedList
{
private:
shared_ptr<Node<T>> head;
shared_ptr<Node<T>> tail;
public:
DoubleLinkedList()
{
head = NULL;
tail = NULL;
total = 100;
for (int i = 0; i < total; i++)
{
Insert(objectgetsinsertedhere);
}
}
void print()
{
shared_ptr<Node<T>> temp;
temp = tail;
temp = temp->getPrev();
cout << temp->getData().getName(); // getName() is a getter to get the name of the object
}
void Insert(T data)
{
T value(data);
if (head == NULL)
{
head = make_shared<Node<T>>(data);
tail = head;
}
else
{
shared_ptr<Node<T>> nu = make_shared<Node<T>>(data);
nu->getPrev() = tail;
if (head == tail)
head->getNext() = nu;
tail->getNext() = nu;
tail = nu;
}
}
};
의 과제가 Insert
원하는 것을 수행하지 않습니다. 이러한 호출 :
nu->getPrev() = tail;
if (head == tail)
head->getNext() = nu;
tail->getNext() = nu;
모두 다음 및 이전 필드의 내용에 대한 복사본을 반환합니다. 접근 자 (get / set)는 새로운 shared_ptr 객체를 만들고 prev 및 next 필드의 현재 값으로 초기화합니다. 이러한 복사 된 shared_ptrs의 내용을 재 할당 할 때 노드의 상태를 조작하지 않습니다.
따라서 일반 필드 ( prev
및 next
)에서 작업하거나 접근 자의 필드에 대한 참조를 반환하거나 (예 : shared_ptr> & getNext () {return next;}) 필드에 대한 setter 메서드를 추가하고이를 사용해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다