解决C++ marked ‘override‘, but does not override

一,问题现象

子类使用override标记了虚函数,编译报错marked ‘override‘, but does not override。

二,问题分析

示例代码如下:

——basic.h
#ifndef _BASIC_H
#define _BASIC_H

class Basic {
public:
    virtual void func() = 0;
};

#endif //_BASIC_H

——derive.h
#ifndef _DERIVE_H
#define _DERIVE_H
#include "basic.h"

class Derive : public Basic {
public:
    virtual void func() override {}
    virtual void func(int a) override {}
};
#endif //_DERIVE_H

——main.cpp
#include "basic.h"
#include "derive.h"

int main()
{
    Basic *bass = new Derive;
    return 0;
}

编译报错如下:

derive.h:15:15: error: ‘virtual void Derive::func(int)’ marked ‘override’, but does not override
  virtual void func(int a) override {}

原因是Basic未声明“virtual void func(int a)”,而子类Derive却使用override 标记该函数,故报错marked ‘override‘, but does not override。

备注下C++ override用法:

在C++中,override关键字用于指示一个成员函数是重写了基类中的虚函数。使用override关键字可以帮助编译器在编译时检查你是否正确地重写了基类中的虚函数。

 

三,解决方案

子类使用override标记了虚函数,那么此函数在基类必须声明,修改如下:

——basic.h
#ifndef _BASIC_H
#define _BASIC_H

class Basic {
public:
    virtual void func() = 0;
    virtual void func(int a) = 0; //子类使用override,基类需要声明
};

#endif //_BASIC_H

 

 

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug猎人

非常非常非常感谢您的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值