2012-05-31 100 views
1

我得到這個奇怪的鏈接錯誤:LNK2019錯誤在C++

Error 1 error LNK2019: unresolved external symbol "public: virtual __thiscall Data::~Data(void)" ([email protected]@[email protected]) referenced in function "public: virtual __thiscall Job::~Job(void)" ([email protected]@[email protected]) C:\...\Job.obj 

Error 2 error LNK2019: unresolved external symbol "public: __thiscall List::DataNode::DataNode(class List::DataNode const &)" ([email protected]@@[email protected]@@Z) referenced in function "public: __thiscall List::List(class List const *)" ([email protected]@[email protected]@@Z) C:\...\List.obj 

從第一個錯誤的描述,它可能是與析構函數。

我有一個純虛析構函數的空洞抽象的數據類:

virtual ~Data()=0; 

和一類工作,從數據得出,用簡單的實現析構函數:

Job::~Job() 
{ 
} 

燦你發現一個問題?我該如何解決它? 謝謝!

+1

提供完整的源代碼... –

回答

5

您需要爲純虛擬析構函數提供定義。

C++ 03 12.4析構函數
第7段:

A destructor can be declared virtual (10.3) or pure virtual (10.4); if any objects of that class or any derived class are created in the program, the destructor shall be defined. If a class has a base class with a virtual destructor, its destructor (whether user- or implicitly- declared) is virtual.

+0

你說的對純虛析構函數提供的定義是什麼意思? – nodwj

+0

@ user1330810:爲它提供一個定義(我認爲你稱之爲* implementation *)爲:'〜Data(){}'即使析構函數是純虛擬的,它也需要一個定義。 –

+0

它的工作原理 - 謝謝!我認爲純函數的含義是你不需要在基類中實現它們 - 析構函數是一個獨特的例子嗎? – nodwj