【问题标题】:How can I stop warnings about unused private fields?如何停止有关未使用的私有字段的警告?
【发布时间】:2013-07-25 00:08:38
【问题描述】:

在 Qt 项目中编译一组文件时,我看到许多与此类似的警告。

In file included from /usr/local/Trolltech/Qt-4.8.6/include/QtGui/qevent.h:52:
/usr/local/Trolltech/Qt-4.8.6/include/QtGui/qmime.h:119:10: warning: private field 'type' is not used [-Wunused-private-field]
    char type;
     ^

根据各种搜索的建议,我确实添加了条目

QMAKE_CXXFLAGS += -Wno-unused-private-field

到 .pro 文件并确认它在编译器调用中正确显示,但我仍然收到该警告。

我在 Mac 上使用 clang 运行 Qt。

提前感谢您提供任何见解。

【问题讨论】:

    标签: c++ macos qt clang


    【解决方案1】:

    每个this answer,试试

    QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-private-field
    

    似乎QMAKE_CXXFLAGS_WARN_ON 标志在QMAKE_CXXFLAGS 之后添加到编译器命令行,并且会重新启用该警告(因为QMAKE_CXXFLAGS 包含-Wall)。

    【讨论】:

      【解决方案2】:

      由于 Qt 库而无法编译,这听起来很奇怪。 由于我不在 Mac 上开发,我要检查的是支持的 Mac 版本/编译器以及如何在 Mac 上编译。之后,如果您符合要求,我会将其报告为错误。

      另一种方法(如本 QT-Bug 中已报告的:To #include generates warnings)是在警告标头周围包含编译指示。

       #pragma GCC diagnostic ignored "-Wunused-private-field"
       #include <QtGui>
       #pragma GCC diagnostic warning "-Wunused-private-field"
      

      【讨论】:

      • 我没有说我不能编译 --- 我只是想不出如何消除特定的警告。
      • @David 我误解了。它可以帮助忽略编译指示。
      • 对于这种方法有一些话要说,这样警告仍然可用于用户代码而不是库代码,尽管我讨厌用这些东西污染我的代码。但是,由于我已经删除了 Qt 的整个源代码,我很想自己删除未使用的字段!
      • gcc 不知道“-Wunused-private-field”并且会用“unknown option after”发出警告,这是一个特定于 clang 的警告。
      • clang 支持 gcc pragma,这就是代码指示 GCC 的原因。但这并不意味着 GCC 中存在此特定警告,它只是一个示例。 clang.llvm.org/docs/UsersManual.html#pragma-gcc-diagnostic
      【解决方案3】:

      首先,我不确定它是否存在 QT 错误,但我在 QT 论坛上发现了一个最近的问题。希望能解决。

      Possible bug: qmime.h warning “char type is unused”

      还有一个, Clang 4.2 warns about QMacMime unused private field "type"

      这可能会对你有所帮助。

      【讨论】:

      • 据我所知,这些不是错误 --- 我认为它们是对 Qt 代码的合法警告,但遗憾的是 Qt 人员没有确保他们的代码没有没有未使用的字段和其他会导致警告的东西。
      【解决方案4】:

      我不是一个clang人,但根据http://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-in-system-headers,您可以将-isystem标志与那些Qt标头所在的目录一起使用,这会将它们视为系统包含并禁止对它们发出警告。

      【讨论】:

      • 我尝试添加 QMAKE_CXXFLAGS += -isystem-prefix /usr/local/Trolltech/Qt-4.8.6/include/ 和 QMAKE_CXXFLAGS += -isystem /usr/local/Trolltech/Qt-4.8。 6/include/ 但这没有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 2019-08-01
      • 2021-01-05
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      相关资源
      最近更新 更多