我认为解构函数有问题,但不知道。实际上,我不了解解构函数的用法。 代码是这样的
#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退出状态
答案 0 :(得分:0)
如错误文字所述
对`B ::〜B()的未定义引用
您没有定义析构函数~B()
。它仅在B
的类定义中声明,但未定义。
你可以写个例子
~B() = default;