You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++重写虚函数已提供函数体仍报expected function body错误如何修复

错误原因

1. override 关键字使用位置错误

C++语法规定,override 关键字仅能用于类内部的虚函数重写声明,不允许出现在类外部的函数定义中,你在FunctionNode.cpp的函数定义末尾加override属于语法违规。

2. 类内未声明重写的方法

你没有在FunctionNode.hpp的类定义中声明toString方法,直接在cpp文件中提供实现,编译器会认为你在定义一个不存在的类成员函数。


修复步骤

  1. 首先修改FunctionNode.hpp,在类的public块中添加toString的重写声明:
class FunctionNode : public DeclarationNode {
    // 原有私有成员不变
    public:
        // 原有构造函数不变
        std::string toString(int level) const override; // 新增这行
};
  1. 然后修改FunctionNode.cpp,删掉函数定义末尾的override关键字:
std::string FunctionNode::toString(int level) const {
    // 原有函数体内容完全保留即可
    std::string indt = indent(level);
    std::string s = indt + "FunctionNode\n";
    s += type->toString(level + 1);
    s += indt + "\t" + name + "\n";
    s += paramList->toString(level + 1);
    s += block->toString(level + 1);
    return s;
}

可选优化建议

你当前基类Node中的toString是有空实现的虚函数,建议改为纯虚函数强制所有派生类必须重写,避免遗漏重写导致的逻辑问题:

// Node.hpp中修改toString的声明
virtual std::string toString(int level) const = 0;

内容的提问来源于stack exchange,提问作者Tom Finet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:45:04