我在使用需要运行的c ++程序时遇到了一些困难。问题本身不是我的,我必须编译。该算法非常庞大,因此对于我当前的错误消息,我将演示一个更简化的代码版本,我生成的代码给出了完全相同的错误。这是代码:
class_1.h(class_1.cpp为空)
class class_1 {
public:
class_1();
virtual ~class_1();
virtual void function() =0;
};
class_2.h(class_2.cpp为空)
include"class_1.h";
class class_2 : public class_1{
public:
class_2();
virtual ~class_2();
virtual void function();
};
class_2a.h(class_2a.cpp为空)
include"class_2.h";
class class_2a : public flos2{
public:
class_2a();
virtual ~class_2a();
};
class_3.h
include "class_2a.h"
include "class_1.h" //I tried unsuccesfully without including class_1.h as well
class class_3 {
public:
class_3();
virtual ~class_3();
virtual void function();
private:
class_2a my_class_2a;
};
class_3.cpp
#include "class_3.h"
class_3::class_3()
:my_class_2a()
{
}
class_3::~class_3()
{
this->function();
}
void flos3::function()
{
my_class_2a.function();
/***Main Body of function***/
}
};
我得到的错误是链接器错误:
undefined reference to `class_2::function()'
我知道一般来说整个算法似乎都很愚蠢,但或多或少这就是我给出的东西,我不允许改变结构本身,只是为了使它工作。正如您在class_1
中看到的那样,函数被定义为纯虚函数,然后通过其他类调用。我真的不知道如何使这件事有用,所以任何帮助都会非常感激......
答案 0 :(得分:0)
您需要添加:
class_1.cpp:
class_1::~class_1() = default;
class_2.cpp:
class_2::~class_2() = default;
void class_2::function() {
// add code here (or not)
}
......等等。
答案 1 :(得分:0)
您收到链接器错误,因为您的函数class_2::function()
没有实现。您需要添加它,最好是在class_2.cpp文件中。
void class_2::function()
{
// Implementation goes here
}
类似的问题是所有虚拟析构函数。他们也需要实现。