c++ - 为什么 MSVC 在覆盖具有正确签名的函数时会产生 C3668 错误?

标签 c++ qt visual-c++

尝试编译派生自 QAbstractItemModel 的代码并重写 data 函数时出现错误,尽管签名完全匹配。

以下代码对我来说失败了:

#include <QAbstractItemModel>

class A : public QAbstractItemModel 
{
        Q_OBJECT

public:
    A();

    virtual QVariant data(const QModelIndex &index, int role) const override; 
};

错误如下:

C3668: 'A::data': method with override specifier 'override' did not override any base class methods

这只是在使用 MS Visual C++ 14.0 而我的 MinGW 编译器可以工作时出现的问题。

编辑:

//  A.cpp

QVariant A::data(const QModelIndex &index, int role) const
{
    Q_UNUSED(index);
    Q_UNUSED(role);

    return QVariant();
}

最佳答案

您提供的方法签名是正确的。由于 VC 和 MinGW 的 Qt 安装不同,问题可能是由于对 VC 版本中的 QAbstractItemModel.h 进行了不必要的修改(例如,您在调试时无意中编辑了头文件)。

检查标题没有被修改,如果是,从备份或其他安装(相同版本)恢复它。

关于c++ - 为什么 MSVC 在覆盖具有正确签名的函数时会产生 C3668 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51989446/

相关文章:

c++ - 如何通过另一个应用程序 'show' 一个应用程序 (visual c++)

c++ - 如何从 C++ 向 Lua 库公开属性

c++ - 分配 vector 中元素的索引而不是其值

c++ - 如何轻松地将 C++ 枚举映射到字符串

windows - 充当虚拟网络摄像头的设备驱动程序

c++ - 将 float 组转换为整数的最佳方法。 [为 x64 替换我的 asm 代码]

c++ - 正在运行的线程中的 cstatic 控件的 Redrawwindow

c++ - 如何从 C++ 访问嵌套的 QML 对象?

c++ - QUdpSocket在高频环境下的局限

qt - QTcpSocket不会读取所有内容