gpt4 book ai didi

为非虚拟方法指定的c++初始化

转载 作者:可可西里 更新时间:2023-11-01 16:30:11 27 4
gpt4 key购买 nike

我有如下所示的a.h

class A
{
public:
void doSomething()=0;
};

然后我有如下所示的b.h

#include "a.h"

class b: public A
{
public:
void doSomething();
};

我只是试图通过尝试编译 header 来检查语法错误,例如g++ -c a.h b.h

我得到低于错误

a.h:4: 错误:为非虚方法 'void A::doSomething()' 指定的初始值设定项

这个错误是什么意思?

最佳答案

如果成员函数是虚函数,则它只能被声明为抽象的 (= 0)。将 virtual 关键字添加到基类(在类 A 中)的函数声明中。

在 C++11 之前,在派生类成员函数的声明中重复 virtual 也是一种很好的做法,尽管在技术上没有必要(因为规则是“once virtual,总是虚拟的”)。

C++11 引入了 override 关键字,可以在重写虚成员函数时使用它,使代码在未来更改时安全(即如果基函数更改签名,派生代码将编译失败而不是默默地出错)。当 override 存在时是否也包含 virtual 取决于个人品味/项目编码标准。我认为它没有必要并省略它,但这只是我个人的喜好。

关于为非虚拟方法指定的c++初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17282625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com