首页 > 解决方案 > 必须实现 C++ 中的虚函数?

问题描述

class A
{
public:
    A(){}
    virtual void func();
};
class B:public A
{
    void func(){}
}

如果func没有实现,当我定义一个对象时会出现链接错误A。所以为什么?我没有打电话func

标签: c++virtual

解决方案


如果func没有实现,我定义A的一个对象时会出现链接错误。那为什么呢?

因为标准说在这种情况下必须定义函数(强调我的):

[类.虚拟]

在类中声明的虚函数应在该类中定义或声明为纯([class.abstract]),或两者兼而有之;不需要诊断([basic.def.odr])。

由于缺乏对非纯虚函数的定义不符合标准,因此该标准不要求工具链能够成功生成可执行文件。

如果链接器能够诊断出缺少的定义,那么您可以认为自己很幸运,因为标准没有强制要求进行诊断。如果信息含糊不清,那么没有强制要求进行诊断是有原因的。链接器很难找出源代码损坏的原因。


推荐阅读