#include<iostream>
class base{
public:
virtual void run()=0;
protected:
~base();
};
class derived : public base {
public:
void run(){};
~derived();
};
int main(){
std::shared_ptr<base> b;
b.reset(new derived);
b->run();
}
我有一個抽象基類和它的派生類。主要的是,我定義了一個共享指針,並將其與派生類型分配。然後,我使用虛擬功能。如果我註釋掉b.reset(新派生),那麼它工作正常。錯誤信息是任何人都知道爲什麼這段代碼不能編譯?
Undefined symbols for architecture x86_64: "derived::~derived()", referenced from: std::__1::shared_ptr::shared_ptr(derived*) in test-274b97.o std::__1::__shared_ptr_pointer, std::__1::allocator >::__on_zero_shared() in test-274b97.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
任何答案將不勝感激!
謝謝。
你沒有定義'derived ::〜derived()'。 – 0x499602D2 2014-11-04 17:26:55
'base ::〜base()'也沒有定義。 – 2014-11-04 17:31:01
從技術上講,它編譯但不鏈接。是的,這是因爲你聲明瞭,但沒有定義你的析構函數。 – 2014-11-04 17:31:52