大家今天跟大家聊聊我最近遇到的一个挺头疼的问题——“pure virtual function call”。别看这名字挺唬人,搞明白咋回事儿,解决起来也没那么难。
遇到问题
事情是这样的,最近我不是一直在搞一个项目嘛用C++写的。吭哧吭哧写一大堆代码,自我感觉良结果一运行,程序直接崩溃,弹出一个对话框,上面写着 "pure virtual function call"。当时我就懵,这是啥玩意儿?以前没见过!
排查过程
遇到问题,咱不能慌,得冷静分析。我做的就是:
- 检查代码: 把最近修改的代码,特别是涉及到类和继承的部分,仔仔细细看个遍。
- 上网查资料: 各种搜索,看看有没有遇到类似问题的朋友,他们的解决办法是
经过一番折腾,我发现问题可能出在虚函数上。虚函数这东西,大家都知道?就是为实现多态,让子类可以重写父类的方法。而纯虚函数,更特别一点,它在父类里只是个声明,没有具体实现,必须由子类来实现。
我这项目中,就用到纯虚函数。问题就出在,我有一个父类,里面定义一个纯虚函数,然后有几个子类继承这个父类。按理说,子类应该实现这个纯虚函数,但我有一个子类,可能是写代码的时候漏掉,没有实现这个纯虚函数!
这就导致,当我创建这个子类的对象,并试图调用这个纯虚函数的时候,程序就不知道该怎么办,因为它找不到具体的实现代码,于是就崩溃,弹出那个“pure virtual function call”的错误提示。
解决问题
找到原因,解决起来就简单。我赶紧去那个漏掉的子类里,把那个纯虚函数的实现给补上。这下再运行程序,一切正常,没有再崩溃。
总结
这回的经历,也算是给我提个醒。以后写代码,特别是用到类、继承、虚函数这些东西的时候,一定要仔细再仔细,确保每个子类都实现父类中定义的纯虚函数。不然,程序冷不丁给你来个崩溃,那可真是让人头大!
今天的分享就到这里。希望我的这回经历能给大家带来一点帮助。记住,遇到问题不要怕,冷静分析,总能找到解决办法的!