首页 > 解决方案 > 即使我编译了所有 cpp 文件,对 Class 的未定义引用

问题描述

首先,我对编码有点陌生,所以我可能只是错过了一些非常明显的东西。我仍然会很感激任何帮助。

我在一个目录中创建了一些头文件和一些代码文件,即“main.cpp”、“elements.cpp”、“queue.cpp”、“elements.hpp”和“queue.hpp”。在“main.cpp”中,我包含了两个 .hpp 文件。

然后我编译:g++ main.cpp elements.cpp queue.cpp得到一个链接了所有三个 .cpp 文件的可执行文件。我仍然收到以下错误消息/usr/bin/ld: /tmp/ccUjQcqj.o: in function main': main.cpp:(.text+0x33): undefined reference to Queue::Queue()'。Queue 是在“queue.hpp”中声明的一个类。

这是“queue.hpp”的代码:

#include "elements.hpp"

class Queue{

Element Q[10];
int start;
int count;

void print(bool dir,int count);

public:

Queue(); //Standard Konstruktor Deklaration

void push(Element e);

void pop();

Element& top();

void print(bool dir=true);

int size();
};

这是“queue.cpp”的代码:

#include "elements.hpp" 
#include <iostream>


class Queue{

Element Q[10];
int start;
int count;

void print(bool dir,int count){ 
if(count>0 && dir==0){
Q[count-1].print();
print(dir,count-1);
}
if(count>0 && dir==1){
print(dir,count-1);
Q[count-1].print();
}
}

public:

Queue():start(0),count(0){}

void push(Element e){
if (count==10){
for(int i=0;i<9;i++){
Q[i]=Q[i+1];
}
Q[9]=e;
}
else{Q[start+count]=e;
count++;
}}

void pop(){
for(int i=0;i<9;i++){
Q[i]=Q[i+1];
}
count--;
}

Element& top(){
return Q[0];
}

void print(bool dir=true){
print(dir,count);
}

int size(){
return count;
}
};

我不明白为什么这里有一个未定义的引用,因为我在 main 中包含了“queue.hpp”,并且“queue.cpp”中的构造函数也没有丢失。

谢谢您的帮助!

标签: c++g++

解决方案


推荐阅读