C ++ unique_ptr <Base>指向派生的ptr

艾莉

我有以下代码:

class Base{
public:
    virtual void do_something(int a) = 0;
    virtual ~Base();

};

template<typename T>
class Concrete : public Base{

    T _t;
public:
    Concrete(){};
    virtual void do_something(int a);
    virtual ~Concrete();
};

template<typename T>
void Concrete<T>::do_something(int a){
    std::cout << a << std::endl;
}
template<typename T>
Concrete<T>::~Concrete(){}

int main(int argc, char **argv) {


    std::unique_ptr<Base> b(new Concrete<int>());
    b->do_something(5);
}

但是,链接退出并出现错误。输出为:

Undefined symbols for architecture x86_64:
  "Base::~Base()", referenced from:
      Concrete<int>::~Concrete() in testbed_evaluator.o
      Concrete<int>::~Concrete() in testbed_evaluator.o
  "typeinfo for Base", referenced from:
      typeinfo for Concrete<int> in testbed_evaluator.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

我不知道我在做什么错

本·沃格特

您向编译器承诺了的析构函数Base,因此对其进行了调用。但是然后您再也没有写过一个,因此当链接程序看到那些调用时,它不知道该怎么办。

您可以像更改一样轻松地修复它

virtual ~Base();

virtual ~Base() {}

后者有一个身体。这是一个真实的定义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章