繁体   English   中英

为什么 MSVC 在用正确的签名覆盖函数时会产生 C3668 错误?

[英]Why does MSVC produce C3668 error when overriding function with correct signature?

尝试编译从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

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

编辑:

//  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 进行了不必要的修改(例如,您正在调试并无意识地编辑了头文件)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM