vendredi 30 novembre 2018

Why am I getting bad_alloc? Implementing a stack c++

I'm trying to implement my own Stack in C++ but I keep getting this error when I try to use the method pop() in which what I'm trying to do is:

  1. Save element from the top in a variable called "res".
  2. Get the reference to the next element from the node class and set it as the top.
  3. size--
  4. Return the variable "res".

If you could help me I'd appreciate it. Thank you!

Node class:

#include <iostream>

using namespace std;

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);
};



template<typename T>
Node<T>::Node() {
    next = nullptr;
}
template<typename T>
Node<T>::Node(const Node& orig) {}

template<typename T>
Node<T>::~Node() {}

template<typename T>
void Node<T>::setElement(T el) {
    element = el;
    cout << element << endl;
}

template<typename T>
T Node<T>::getElement() {
    return element;
}

template<typename T>
Node<T>* Node<T>::getNext() {
    return next;
}

template<typename T>
void Node<T>::setNext(Node<T>* ne) {
    next = ne;
}

Stack class:

#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>
LinkedStack<T>::LinkedStack() {
    first = nullptr;
    siz = 0;
}

template<class T>
LinkedStack<T>::~LinkedStack() {
}

template<class T>
int LinkedStack<T>::size() { return siz; }
template<class T>
bool LinkedStack<T>::isEmpty() { siz == 0; }

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>::top() {
    //to do after...
}

template<class T>
T LinkedStack<T>::pop() {
    T res = first->getElement();
    first = first->getNext();
    siz--;
}

Aucun commentaire:

Enregistrer un commentaire