title: Undefined reference when using a function included in a header file
body: <p>I am experiencing something weird with my c++ source file or perhaps the compiler itself. It seems that when I attempt to compile the file, it hits me with a message - </p>
  
  <p><strong>undefined reference to "Basic_int_stack::Basic_int_stack()</strong></p>
  
  <p><strong>undefined reference to "Basic_int_stack::Push(int)</strong></p>
  
  <p>Here is my code (I'm still a beginner so don't expect any crazy professional code )</p>
  
  <p>Header file:</p>
  
  <pre><code>class Basic_int_stack
  {
    public:
      // This part should be implementation independent.
      Basic_int_stack(); // constructor
      void push( int item );
      int pop();
      int top();
      int size();
      bool empty();
  
    private:
      // This part is implementation-dependant.
      static const int capacity = 10 ; // the array size
      int A[capacity] ; // the array.
      int top_index ; // this will index the top of the stack in the array
  };
  </code></pre>
  
  <p>Implementations: </p>
  
  <pre><code>#include "basic_int_stack.h"// contains the declarations of the variables and functions.
  
  Basic_int_stack::Basic_int_stack(){
    // the default constructor intitializes the private variables.
    top_index = -1; // top_index == -1 indicates the stack is empty.
  }
  
  void Basic_int_stack::push( int item ){
    top_index = top_index + 1;
    A[top_index] = item ;
  }
  
  int Basic_int_stack::top(){
    return A[top_index];
  }
  
  int Basic_int_stack::pop(){
    top_index = top_index - 1 ;
    return A[ top_index + 1 ];
  }
  
  
  bool Basic_int_stack::empty(){
    return top_index == -1 ;
  }
  
  int Basic_int_stack::size(){
      return top_index;
  }
  </code></pre>
  
  <p>Main Function:</p>
  
  <pre><code>#include "basic_int_stack.h"
  #include &lt;iostream&gt;
  
  
  int main()
  {
      int var;
  
      Basic_int_stack s1;
      while((std::cin &gt;&gt; var)&gt;=0){
          s1.push(var);
      }
      return 0;
  }
  </code></pre>