【问题标题】:Undeclared identifier 'QVariant' convert legacy Qt 4 to 5未声明的标识符“QVariant”将旧版 Qt 4 转换为 5
【发布时间】:2017-03-10 05:53:26
【问题描述】:

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

查看 .cpp 文件

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

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

查看头文件

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

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

Found similar Stackoverflow query

好的...那么替换是什么?

【问题讨论】:

  • QVariant 是否包含在头文件中? #include &lt;QVariant&gt;
  • 谢谢CP,就是这样!!!解决了

标签: c++ qt qvariant


【解决方案1】:

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

#include &lt;QVariant&gt; 添加到头文件以解决该问题。

它坏了,因为一些 Qt 标头曾经包含 &lt;QVariant&gt;,而您隐含地依赖它。随着 Qt 的更新,这样的相互依赖被最小化了,并且头文件现在只包含在独立翻译单元中编译时使它们有效所需的最低限度。因此,您损坏的代码已经暴露了它的错误。

【讨论】:

  • 谢谢KO,解释有帮助!告诉为什么需要这个修复是巨大的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2014-11-21
相关资源
最近更新 更多