继承类中的delete会导致符号查找错误

时间:2018-04-02 00:38:55

标签: c++ dll

问题:

我一直在尝试创建一个继承的类(在DLL中,但这不一定相关)。但是我得到了一个符号查找错误(一个未解析的外部)。

代码:

#include <iostream>

class Foo {
public:
    virtual void print() = 0;
    virtual ~Foo() = 0;
};

class Bar : public Foo {
public:
    Bar() { std::cout << "Bar()\n"; }
    virtual void print() { std::cout << "Bar->print\n"; }
    virtual ~Bar() { std::cout << "~Bar()\n"; }
};

int main() {
    Foo *b = new Bar();
    b->print();
    delete b;
    return 0;
}

编译后,我收到以下错误:

bla.cpp :(。text._ZN3BarC2Ev [_ZN3BarC5Ev] + 0x47):未定义的引用`Foo :: ~Foo()

SOLUTION:

问题在于你不能拥有纯虚拟析构函数(仍然不清楚为什么会这样)。所以改变这个:

virtual ~Foo() = 0;

到此:

virtual ~Foo() {}

修复一切。感谢用户,我',为解决方案

1 个答案:

答案 0 :(得分:1)

更改virtual~LibBase()= 0; to virtual~LibBase(){}在Window(MinGW)上使用输出:

  

     

打印

     

〜库

     

离开主要