我遇到了一些需要運行的C++程序的困難。問題本身不是我的,我必須將其編譯。該算法是相當巨大的,所以對於我目前的錯誤信息,我將演示一個更簡化的代碼,我生成的代碼給了我完全相同的錯誤。下面是代碼:純虛函數中的未定義引用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
中看到的,函數被定義爲一個純虛函數,然後通過其他類被調用。我真的不知道該怎麼做這件事情的工作,所以任何幫助將非常感激......
您不允許更改class_2.cpp以添加函數的實現嗎? –
請編譯一個最小的測試用例(並且仍然有未定義的參考) –
基類或接口的虛函數應該在其派生類中實現。在class_2.cpp中,我沒有看到'virtual void function()'的任何實現' – Itachi