[英]c++ initialized specified for non-virtual method
我有啊如下图所示
class A
{
public:
void doSomething()=0;
};
然后我有bh如下所示
#include "a.h"
class b: public A
{
public:
void doSomething();
};
我只是试图通过尝试编译g++ -c ah bh
等标题来检查语法错误
然后我低于错误
ah:4: error: initializer specified for non-virtual method 'void A::doSomething()'
这个错误意味着什么?
如果成员函数是虚拟的,则只能将其声明为abstract( = 0
)。 将virtual
关键字添加到基类中的函数声明中(在类A
)。
在C ++ 11之前,在派生类成员函数的声明中重复virtual
也是一种好习惯,尽管从技术上讲它不是必需的(因为规则是“一次虚拟,总是虚拟”)。
C ++ 11引入了override
关键字,它可以在覆盖虚拟成员函数时使用,以使代码可以安全地防止将来的更改(即,如果基本函数更改签名,派生代码将无法编译而不是默默地变为错误)。 是否还包括virtual
override
存在取决于个人品味/项目编码标准。 我认为这是不必要的,省略了,但这只是我个人的偏好。
问题正是编译器所说的。
class A
{
public:
virtual void doSomething()=0; // virtual keyword needed
};
这意味着A
做某事不是虚拟的,但你试图让它变成纯粹的虚拟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.