使用头文件中包含的函数时未定义的引用

时间:2015-01-22 06:40:31

标签: c++ codeblocks

我在使用我的c ++源文件或者编译器本身时遇到了一些奇怪的事情。似乎当我尝试编译文件时,它会给我发送一条消息 -

对“Basic_int_stack :: Basic_int_stack()

的未定义引用

对“Basic_int_stack :: Push(int)

的未定义引用

这是我的代码(我还是初学者,所以不要指望任何疯狂的专业代码)

标题文件:

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

实施:

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

主要功能:

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

3 个答案:

答案 0 :(得分:7)

这种情况正在发生,因为您在不构建和链接类实现文件的情况下构建主文件。您需要以某种方式调整构建设置。

答案 1 :(得分:0)

这是因为你在卷入时不会包含Basic_int_stack.cpp。

简单地说,当遇到Undefined reference to xxx时,它是由链接器生成的错误,这意味着编译器无法找到实现。因此,您需要检查是否包含cpp文件或动态库或静态库。

答案 2 :(得分:-4)

我遇到了同样的问题。最后,我通过在主文件中包含.cpp文件找到了修复。

#include "file_name.cpp" //In the main file