template<class T>
void LinkedStack<T>::push(T e) {
Node<T> node = Node<T>();
node.setNext(first);
node.setElement(e);
first = &node;
siz++;
}
Поскольку node
является объектом, локальным для этой функции, как только эта функция завершается, она уничтожается.Однако first
содержит указатель на него.Поэтому, когда эта функция возвращает, first
содержит указатель на объект, который больше не существует.Вы, вероятно, хотите это:
template<class T>
void LinkedStack<T>::push(T e) {
Node<T>* node = new Node<T>();
node->setNext(first);
node->setElement(e);
first = node;
siz++;
}
Теперь, node
по-прежнему перестает существовать, когда эта функция возвращается.Но first
не содержит указатель на node
, он содержит значение node
- указатель на динамически размещаемый объект.
Обратите внимание, что вам придется управлять временем жизни этоговозражать как-то.В идеале вы бы не использовали необработанные указатели, чтобы у вас не было такого бремени.