C++ 纯虚析构函数 error LNK2019

C#和Java写的多了,在能声明为接口的情况下,尽量不会声明为抽象类

昨天写C++程序,理所当然的把基类里的所有方法都写成了纯虚函数。事实上也的确应该全是纯虚函数。因为我是把两个(以后可能会是n个)硬件厂商的SDK抽象出来,硬件不一样,软件SDK差别就更大了,完全没有一致的地方。

基类的析构函数应该声明为虚函数的,索性一不做二不休声明为纯虚构函数好了。

这样,一个类似与Java中接口的C++抽象类就产生了,它只有头文件,源文件里只有两个#include,还是VS自动生成的。

等到我把实现写好,编译链接时报错:错误 1 error LNK2019: 无法解析的外部符号 "public: virtual __thiscall ::~CMyBaseClass(void)" ,该符号在函数 ******** 中被引用 

查了一下,析构函数必须要有函数体,哪怕你把他声明为纯虚函数。

析构函数,构造函数这些还是和普通的函数是不一样的。对照构造函数,派生类的构造函数必须先调用基类的构造函数。也许你没调用过,那是因为默认情况下调用无参数的默认构造函数。类似的,析构函数也是一样,他必然会调用基类的析构函数,不同的是,他是后调用基类析构函数的。所以基类的析构函数必须要有函数体。

给基类纯虚析构函数加了一个空的函数体,编译链接通过,在派生类析构函数开始除设置断点,单步跟踪,在执行完派生类析构函数后,跳到基类析构函数继续执行。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值