Simple stack implementation
A few comments, wrt style.

#include &lt;iostream&gt;                                                   
using namespace std;


You don't need a forward declaration of struct Node.

//struct Node;


You could add a constructor here just like in class. So your initialization
is simpler.

struct Node {
    int data;
    Node* next;
    Node(int d):data(d), next(0){}
};


It may be a good idea to write an abstract class as an interface, and then write
the concrete class to conform to it. Another idea is to try to templatize Node so that the data can be any type. Also look at the stack class in STL

You may also want top() and empty() methods

on logic: If you are going to implement a stack using a linked list, you don't really need to keep a first and a last. Just keep the reference to the top element. On push, create a new node, set its next to the current top, and set it to top. On pop, set the top to the next of current top, and delete the node. Something along the lines of: (may contain bugs.)

struct Node {
    int data;
    Node* next;
    Node(int v, Node* n):data(v),next(n) {}
};

class Stack {
  public:
    Node* top;
    Stack():top(0){}
    ~Stack() {
      while (top != 0) pop();
    }
    Stack&amp; push(int value) {
      top = new Node(value, top);
      return *this;
    }    
    Stack&amp; pop() {
      if (!top) throw "No nodes to pop.";
      Node* t = top;
      top = top-&gt;next;
      delete t;
      return *this;
    }
};