【发布时间】:2019-01-30 01:09:42
【问题描述】:
在尝试编译派生自 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();
}
【问题讨论】:
-
如果省略
override会发生什么?编译器会让你创建一个A对象吗?如果不是,错误信息是什么? (这只是一个实验) -
如果我省略
override那么,是的,它确实有效。 -
是否使用默认值` = Qt::DisplayRole` 有帮助?
-
好点,但不幸的是,即使使用默认值也会弹出相同的错误。
-
在 MSVC 15.8.1 和 Qt 5.10.0 中正常工作...可能原始 Qt 的头文件被错误地编辑了? (Qt的安装对于VC和MinGW应该是不一样的,所以可能问题就出在这里)
标签: c++ qt visual-c++