【发布时间】:2019-05-02 19:52:53
【问题描述】:
我正在尝试在 C++ 中实现我自己的堆栈,但是当我尝试使用 pop() 方法时,我一直收到此错误,我正在尝试做的是:
- 将元素从顶部保存到名为“res”的变量中。
- 从节点类中获取对下一个元素的引用并将其设置为顶部。
- 大小--
- 返回变量“res”。
如果您能帮助我,我将不胜感激。谢谢!
节点类:
template<class T>
class Node {
private:
Node<T>* next;
T element;
public:
Node();
Node(const Node& orig);
~Node();
void setElement(T el);
T getElement();
Node<T>* getNext();
void setNext(Node<T>* ne);
};
堆栈类:
#include "EmptyStackException.cpp"
#include "Node.cpp"
#include <iostream>
using namespace std;
template<class T>
class LinkedStack {
private:
int siz;
Node<T>* first;
public:
LinkedStack();
~LinkedStack();
int size();
bool isEmpty();
void push(T e);
T top();
T pop();
};
template<class T>
void LinkedStack<T>::push(T e) {
Node<T> node = Node<T>();
node.setNext(first);
node.setElement(e);
first = &node;
siz++;
}
template<class T>
T LinkedStack<T>::pop() {
T res = first->getElement();
first = *(first->getNext());
siz--;
}
【问题讨论】:
-
rule of 3/5/0 表示
Node和LinkedStack需要赋值运算符,LinkedStack还需要一个复制构造函数。此外,许多现有的构造函数和析构函数并没有做他们应该做的事情。 -
您不能存储
&的结果以供以后使用。您需要动态分配。 -
first = &node;接受一个指向本地对象的指针,当您的函数返回时,该指针将不复存在。您将需要使用某种形式的动态分配。 -
令人惊讶的是,我经常看到一个关于存储指向局部变量的指针引起的问题的问题。这种明显错误的模式是否在某处被教授?
标签: c++ c++11 pointers stack bad-alloc