C++ 链表ostream重载值
我对使用链表真的是个新手。我正试图使ostream Operator过载,以获得一个具有减容功能的双链接列表:C++ 链表ostream重载值,c++,c++11,linked-list,C++,C++11,Linked List,我对使用链表真的是个新手。我正试图使ostream Operator过载,以获得一个具有减容功能的双链接列表: template <class T> class DynamicList; template <class T> template <class T> class DynamicList { private: Node<T> *head; public: class Node { public: T*
template <class T>
class DynamicList;
template <class T>
template <class T>
class DynamicList
{
private:
Node<T> *head;
public:
class Node
{
public:
T* value;
Node<T> *next;
Node<T> *prev;
Node(T val)
{
next = nullptr;
prev = nullptr;
value = &val;
}
};
DynamicList();
~DynamicList();
void operator+=(const T);
friend std::ostream & operator<< <>(std::ostream &, const DynamicList<T> &);
};
模板
阶级动态主义者;
模板
模板
阶级动态学家
{
私人:
节点*头;
公众:
类节点
{
公众:
T*值;
节点*下一步;
节点*prev;
节点(T值)
{
next=nullptr;
prev=nullptr;
值=&val;
}
};
DynamicList();
~DynamicList();
无效运算符+=(常数T);
friend std::ostream&operator您的问题在于:
T* value;
您正在存储值的地址。
问题是您正在存储超出范围的变量的地址
T vall = val;
Node<T>* newNode = new Node<T>(vall);
T* value;
T vall = val;
Node<T>* newNode = new Node<T>(vall);
class Node
{
public:
T value; // Notice no star here.
Node<T> *next;
Node<T> *prev;
Node(T const& val) // Add `const&` here to avoid a copy.
{
next = nullptr;
prev = nullptr;
value = val; // Notice no and `&` here
}
};