纯虚函数C ++中的未定义引用

时间:2014-01-29 12:45:40

标签: c++ class reference undefined pure-virtual

我在使用需要运行的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中看到的那样,函数被定义为纯虚函数,然后通过其他类调用。我真的不知道如何使这件事有用,所以任何帮助都会非常感激......

2 个答案:

答案 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
}

类似的问题是所有虚拟析构函数。他们也需要实现。