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

时间:2018-08-23 15:35:55

标签: c++ qt visual-c++

在尝试编译从delete where { ?s ?p ?o . ?o a :Foo . } 派生并覆盖QAbstractItemModel函数的代码时遇到错误,尽管签名完全匹配。

以下代码对我而言失败:

data

,出现以下错误:

#include <QAbstractItemModel>

class A : public QAbstractItemModel 
{
        Q_OBJECT

public:
    A();

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

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

编辑:

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

1 个答案:

答案 0 :(得分:1)

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

检查标题是否已修改,如果已修改,请从备份或其他安装(相同版本)中还原它。