#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();
}
我有一个抽象基类和派生类。在main中,我定义了一个共享指针并使用派生类型进行分配。然后,我使用虚函数。如果我注释掉b.reset(new derived),那么它工作正常。错误消息是
架构x86_64的未定义符号: “derived ::〜derived()”,引自: test-274b97.o中的std :: __ 1 :: shared_ptr :: shared_ptr(derived *) test-274b97.o中的std :: __ 1 :: __ shared_ptr_pointer,std :: __ 1 :: allocator&gt; :: __ on_zero_shared() ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
任何答案都将不胜感激! 感谢。
答案 0 :(得分:3)
您没有为类base和derived定义析构函数。你只声明了它们。析构函数也必须是虚拟的