C++重写withdraw虚函数报Expected function body编译错误
错误根因
触发Expected function body after function declarator编译错误的直接原因是override关键字使用位置错误:C++语法规定override仅能用于类定义内部的虚成员函数声明处,不允许出现在类外部的成员函数定义位置。
你贴的代码是类外的成员函数实现,在函数头添加override属于非法语法,编译器无法解析,就会抛出该错误。
修复方案
- 删除类外函数实现上的
override关键字,修正后的实现代码如下:
bool Checking_Account::withdraw (double amount) { amount += per_check_fee; return Account::withdraw(amount); }
- 确认
Checking_Account类的内部声明处,已经为withdraw函数添加override限定符,保证编译器做重写合法性校验,类内声明参考写法:
class Checking_Account : public Account { private: double per_check_fee; public: // 其余构造函数、成员函数声明 bool withdraw(double amount) override; // *override仅需写在类内声明处* };
连带排查点
如果删除类外的override后仍然报同类错误,依次检查以下高频问题:
- 确认
Checking_Account类的定义末尾没有漏掉收尾的分号;,类定义漏分号是触发该类语法错误的最常见诱因 - 确认基类
Account中的withdraw函数是虚函数(声明时带virtual关键字),否则不存在虚函数重写的基础 - 确认子类
withdraw的函数签名和基类完全匹配:参数列表、const修饰符完全一致,返回值为基类对应函数返回值的协变类型,签名不匹配时重写不成立
内容的提问来源于stack exchange,提问作者123_4
相关产品推荐
相关产品推荐

