【问题标题】:undefined reference in c++ classc++ 类中未定义的引用
【发布时间】:2014-04-10 23:41:10
【问题描述】:

大家好,所以我试图使用两个队列来实现堆栈,但是,我遇到了一个问题,说对 my_queue 类的引用没有定义

错误是(我只包括一些,因为所有的都有未定义的引用)

my_stack.cpp:(.text+0x15): undefined reference to `my_queue::my_queue()'
my_stack.cpp:(.text+0x25): undefined reference to `my_queue::my_queue()'
my_stack.cpp:(.text+0x31): undefined reference to `my_queue::my_queue()'
my_stack.cpp:(.text+0x3d): undefined reference to `my_queue::my_queue()'
/tmp/ccNs1Fuy.o: In function `my_stack::push(int)':
 `my_queue::dequeue()'

my_stack 的代码如下。我也有 my_stack 类和 my_queue 类的两个头文件,但我认为它们没有错误。

#include<iostream>
#include<vector>
#include"my_stack.h"
#include"my_queue.h"

my_stack::my_stack(){
    my_queue q1;
    my_queue q2;

}

void my_stack::push(int n){
    q1.enqueue(n);
}

int my_stack::pop(){
    for(int i =0; i<q1.size()-1; i++){
        int temp = q1.dequeue();
        q2.enqueue(temp);
    }//dequeue every element in the q1 except the last element and enqueue to q2
    int x = q1.dequeue();// dequeue the last item of q1


    return x;
}

void my_stack::is_empty(){
    if(q1.size() == 0){
    std::cout<< "the stack is empty"<<'\n';
    }

    else{
    std::cout<< "the stack is not empty"<<'\n';
    }
}

int main(){
    my_stack m;
    m.push(4); 
    m.push(3);
    int yo = m.pop();
    std::cout<<yo<<'\n';
    m.is_empty();

return 0;
}

谢谢大家,对于这个杂乱无章的问题,我们深表歉意。

【问题讨论】:

  • 就像它说的那样,my_queue::my_queue()没有定义
  • 这是一个链接器错误。你是如何编译你的程序的?
  • 需要看头文件
  • @ooga g++ -o o my_stack.cpp
  • @ooga 我应该做 g++ -o o my_stack.cpp my_queue.cpp 吗?

标签: c++ class reference undefined


【解决方案1】:

由于我们看不到头文件,所以我在这里做一个假设,但看到 cmets 似乎您的链接器错误可能是由于未实现的函数。

我假设您的标题“my_queue.h”包含声明而不是实现。您似乎缺少的是函数的实现,这就是您遇到链接器错误的原因。 你有一些 my_queue.cpp 吗?如果是这样,那么您应该链接它,因为否则您的程序不知道这些函数是实现的,但是,它应该使用它们。这就是联动错误的原因

【讨论】:

  • 是的,我愿意。是的,这只是一个链接错误。感谢您的帮助
猜你喜欢
  • 2022-01-16
  • 2013-12-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
相关资源
最近更新 更多