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

返回数组常量引用的类方法添加override编译失败问题

编译失败的原因

这是C++语法解析的优先级导致的问题。当你用const int (&getDataRef())[100]这种传统风格声明返回数组引用的函数时,编译器会将[100]视为函数声明的收尾部分,认为此处应该以分号结束。后续的override关键字会被编译器误判为新的声明内容,既无法识别它是重写标识,还会报错说它是未知类型。

无需typedef的解决方法

使用C++11引入的**尾置返回类型(trailing return type)**可以解决这个问题,这种写法能让函数的结构更清晰,编译器可以正确识别override的位置:

修改后的完整代码示例

#include <iostream>

class iMyClass
{
public:
    // 可选:基类也改用尾置返回类型提升可读性
    virtual auto getDataRef() -> const int (&)[100] = 0;
};

class MyClass : public iMyClass
{
public:
    MyClass(): arr{}{};
    // 用尾置返回类型声明,override位置符合语法要求
    auto getDataRef() -> const int (&)[100] override;
    void set() {arr[5] = 5;};
private:
    int arr[100];
};

// 类外定义同步使用尾置返回类型(风格统一)
auto MyClass::getDataRef() -> const int (&)[100]
{
    return arr;
}

int main()
{
    MyClass a;
    const int (&brr)[100] = a.getDataRef();
    a.set();
    std::cout << brr[5];

    return 0;
}

这样修改后,编译器能正确识别override是重写基类虚函数的标识,代码可以正常编译运行,输出结果依然是5。

内容的提问来源于stack exchange,提问作者Nicolas Zurlinden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:24:52