未声明的标识符 'QVariant' 将旧版 Qt 4 转换为 5

Undeclared identifier 'QVariant' convert legacy Qt 4 to 5

我需要将 Qt 遗留代码从 4.7 转换为 5.8,我在 Qt Creator 4.2.1 Clang 7.0(Apple) 64 位中遇到编译错误

正在查找 .cpp 文件

bool queries::insert(const QString &tableName_, const QMap<QString, QVariant> &values_) const

.cpp 错误 ./src/classes/queries.cpp:283:15: error: 'insert' 的外联定义与 'queries' 中的任何声明不匹配错误指向至 'insert'

查看头文件

bool insert(const QString &tableName_, const QMap<QString, QVariant> &values_) const;

.h 中出错 ../src/classes/queries.h:157:64: 错误:使用未声明的标识符 'QVariant' 错误指向 'QVariant>'

Found similar Whosebug query

好的...那么替代品是什么?

解析定义时,QVariant 是已知类型。但是当声明被解析时,QVariant 还不知道。因此,声明无效,编译器只能忽略它。

#include <QVariant> 添加到头文件以修复该问题。

它坏了,因为一些 Qt 头文件过去常常包含 <QVariant>,而您隐含地依赖于它。随着 Qt 的更新,这种相互依赖性被最小化,如果在独立的翻译单元中编译,头文件现在只包含使它们有效所需的最少内容。因此,您的损坏代码已暴露其错误。