【问题标题】:Qt 5.5 (Q_ENUM causing compile error)Qt 5.5(Q_ENUM 导致编译错误)
【发布时间】:2015-11-19 09:20:15
【问题描述】:

我刚刚将 Qt 从 5.3.2 升级到 5.5.0。在 5.3.2 中编译得很好的项目(使用 QAbstractTableModel)在 5.5.0 中无法编译,报告以下错误(多次):

/usr/local/Qt-5.5.0/include/QtCore/qabstractitemmodel.h:241: error: ISO C++     forbids declaration of 'Q_ENUM' with no type [-fpermissive]
     Q_ENUM(LayoutChangeHint)
                        ^

错误完全在 Qt 的文件中,而不是我的。我正在使用 gcc491。下面是我的项目文件中的一些有趣的部分。有什么想法吗?

TEMPLATE = app
TARGET = MyApp
QT += core widgets gui
QMAKE_CXXFLAGS += -g -std=c++11

【问题讨论】:

  • 你的枚举和类LayoutChangeHint可能有冲突,看这里*.com/questions/9452329/…
  • 问题是,如果我错了,请纠正我,这是 Qt 的冲突,而不是我的。我没有任何子类 LayoutChangeHint。
  • 不确定。我只能在 Qt 中找到 enum LayoutChangeHint { NoLayoutChangeHint, VerticalSortHint, Horizo​​ntalSortHint }。您是否发现任何其他相关的因素会导致冲突?
  • 好的,我找到了——我的 .project 文件在 INCLUDEPATH 中仍然有 5.3.2 目录。大问题。 ;) 感谢您的回复.. 他们让我思考。

标签: qt qt5.5


【解决方案1】:

无脑移动。在 QtCreator 中,我指向了 qmake 的 5.5.0 版本,但在 .project 文件中,5.3.2 仍在 INCLUDEPATH 中。

【讨论】:

    【解决方案2】:

    在我的 Mac 上升级到 Qt5.5 后,我遇到了同样的问题。事实证明,我曾经通过自制软件安装了 QT。我尝试进行“brew update”,但即使它更新了 QT5,问题仍然存在……经过搜索,我发现可能存在未解决的问题。

    为了解决这个问题,我通过 Homebrew (brew uninstall qt) 卸载了 QT,并使用 QT 安装目录中的“MaintenanceTool”应用程序卸载了 QT。然后我再次使用在线安装工具重新安装了 Qt5.5。这个序列终于完成了这项工作。

    似乎有必要确保旧的 QT 库/链接已消失,以便 Qt5.5 安装程序可以设置这些库/链接,以便正确找到它们。 Homebrew 留下的那些旧符号链接不知何故没有被 Qt5.5 安装程序更新或替换。我在多次失败后发现了这一点。希望这可以避免其他人像我一样头疼。

    【讨论】: