尝试编译派生自 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/