Ich habe eine Templates-Stack verknüpfte Liste für eine Aufgabe geschrieben, die ich vervollständigen muss. Wenn ich es ausführe, druckt es das erste Element aus, stürzt dann aber ab. Irgendwelche Ideen, was könnte schief gehen? Ich habe das Gefühl, es könnte die Pop-Funktion sein, aber es ist so einfach, ich bin mir nicht sicher, was überhaupt falsch ist.Templated Stack Verknüpfte Liste
template<typename T>
struct StackNode
{
T data;
StackNode* next;
StackNode(T t, StackNode* ptr);
~StackNode();
};
template <typename T>
StackNode<T>::StackNode(T t, StackNode* ptr = nullptr)
:data(t), next(ptr)
{
}
template <typename T>
StackNode<T>::~StackNode()
{
delete next;
}
template<typename T>
struct LinkedStack
{
LinkedStack();
LinkedStack(const StackNode<T> &s);
~LinkedStack();
bool isEmpty();
void push(const T& t);
void pop();
T top();
StackNode<T>* head;
int numElements;
};
template <typename T>
LinkedStack<T>::LinkedStack()
: head(nullptr), numElements(0)
{
}
template<typename T>
LinkedStack<T>::LinkedStack(const StackNode<T> &s)
: head(nullptr), numElements(0)
{
for (auto t = s.head; t; t = t->next)
push(t->item);
}
template<class T>
LinkedStack<T>::~LinkedStack()
{
while (!isEmpty())
{
pop();
}
}
template<typename T>
bool LinkedStack<T>::isEmpty()
{
if (numElements > 0)
{
return false;
}
else
{
return true;
}
}
template<typename T>
void LinkedStack<T>::push(const T& t)
{
head = new StackNode<T>(t, head);
numElements++;
}
template<typename T>
void LinkedStack<T>::pop()
{
if (isEmpty())
{
cout << "Stack is empty." << endl;
}
else
{
StackNode<T>* oldnode = head;
head = head->next;
numElements--;
delete oldnode;
}
}
template<typename T>
T LinkedStack<T>::top()
{
if (isEmpty())
{
cout << "Stack is empty..." << endl;
}
else
{
return head->data;
}
}
int main()
{
LinkedStack<string> x;
x.push("Test");
x.push("One");
x.push("Two");
x.push("Three");
cout << "Now popping all elements of the stack:" << endl;
while (x.isEmpty() == false)
{
cout << x.top() << endl;
x.pop();
}
}