【问题标题】:std type_traits conflict with Qt type_traitsstd type_traits 与 Qt type_traits 冲突
【发布时间】:2017-04-01 13:53:53
【问题描述】:

我安装了 Qt 5.8,但出现此错误。 我的 pro 文件中也有 CONFIG += c++14,我也尝试过使用 c++11。

/usr/include/x86_64-linux-gnu/qt5/QtCore/qtimer.h:106: error: ‘is_same’ is not a member of ‘QtPrivate’!QtPrivate::is_same<const 

还有

/usr/include/c++/5/type_traits:958: note:   ‘std::is_same’
     struct is_same;

【问题讨论】:

  • 这个问题可以通过一些上下文和细节来改进:1)错误信息似乎被切断了,提供完整的信息。 2) 什么时候你得到那个错误?编译您的应用程序之一?编译 Qt?
  • 您确定安装的版本吗? This commit 应该修复这个 IMO,据我所知,它应该在 5.8.0 中。
  • /usr/include/ x86_64-linux-gnu /qt5/QtCore/qtimer.h 看起来很奇怪。也许您正在混合来自不同版本 Qt 的头文件?

标签: c++ qt c++11 typetraits


【解决方案1】:

根据@DanielJour 对问题的评论,我一直在 Qt git 存储库中进行一些挖掘。

查看文件 qtimer.h 的历史记录并将其与您的错误消息 (qtimer.h:106: error: ‘is_same’ is not a member...) 相关联,我发现 this commit 将调用从第 106 行移至第 112 行对 is_same 的调用(并且再也没有回来),因此您将包含来自该提交之前qtimer.h

该提交来自 2016 年 1 月 15 日,并且从 Qt 5.7 开始包含在内。

所以我猜你已经安装了几个不同版本的 Qt,并且不知何故你的程序包含了旧的头文件,而不是来自 Qt 5.8 的头文件。

另一个让我得出这个结论的注释是,您的头文件位于/usr/include/x86_64-linux-gnu/qt5/,但通常安装的位置位于/usr/include/qt/usr/include/qt5。你的看起来像一个多库或交叉编译器路径......

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多