对于派生类和解构方法的未定义引用'vtable'

时间:2019-06-19 12:16:27

标签: c++ inheritance virtual destructor definition

我认为解构函数有问题,但不知道。实际上,我不了解解构函数的用法。 代码是这样的

#include <iostream>
using namespace std;
class A
{
public:
explicit A(int x);
virtual ~A()=default;
protected:
int a;
void function1(int X);
};

class B:public A
{
public:
explicit B(int x);
~B();
private:
int c;
};

void A::function1(int X){
  std::cout << "function1 " << X<< endl;
}

A::A(int x):a(0)
{
std::cout << "A " << x+a<< endl;
}

B::B(int x):A(x),c(3)
{
  std::cout << "B " << x+c<< endl;
}

int main()
{
B b1(1);
return 0;
}

它显示

/home/qiuyilin/projects/inheritance/main.cpp:36:未定义对vtable for B' CMakeFiles/inheritance.dir/main.cpp.o: In function main'的引用: /home/qiuyilin/projects/inheritance/main.cpp:43:对`B ::〜B()'的未定义引用 collect2:错误:ld返回1退出状态

1 个答案:

答案 0 :(得分:0)

如错误文字所述

  

对`B ::〜B()的未定义引用

您没有定义析构函数~B()。它仅在B的类定义中声明,但未定义。

你可以写个例子

~B() = default;