Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Undefined reference when using a function included in a header file [duplicate]

Tags:

c++

codeblocks

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 -

undefined reference to "Basic_int_stack::Basic_int_stack()

undefined reference to "Basic_int_stack::Push(int)

Here is my code (I'm still a beginner so don't expect any crazy professional code )

Header file:

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

Implementations:

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

Main Function:

#include "basic_int_stack.h"
#include <iostream>


int main()
{
    int var;

    Basic_int_stack s1;
    while((std::cin >> var)>=0){
        s1.push(var);
    }
    return 0;
}
like image 999
user3720526 Avatar asked Jan 22 '15 06:01

user3720526


2 Answers

This is happening because you're building your main file without building and linking your class implementation file as well. You need to adjust your build settings somehow.

like image 116
John Zwinck Avatar answered Oct 06 '22 00:10

John Zwinck


It is because you don't include Basic_int_stack.cpp when you complile.

Simplely speaking, when you encounter Undefined reference to xxx, it is a error generated by linker, when means the compliler can't find the implements. So you need check if you include the cpp file or dynamic library or static library.

like image 33
frank.lin Avatar answered Oct 06 '22 01:10

frank.lin