任何人都知道为什么这段代码不能编译?

时间:2014-11-04 17:26:13

标签: c++ c++11 polymorphism

#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查看调用)

任何答案都将不胜感激! 感谢。

1 个答案:

答案 0 :(得分:3)

您没有为类base和derived定义析构函数。你只声明了它们。析构函数也必须是虚拟的