Как отключить предупреждения о неиспользуемых закрытых полях?

При компиляции набора файлов в проекте 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 и подтвердил, что он правильно отображается при вызовах компилятора, но я все еще получаю это предупреждение.

Я запускаю Qt на Mac с помощью clang.

Заранее спасибо за любую информацию.


person David    schedule 25.07.2013    source источник


Ответы (4)


За этот ответ попробуйте

QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-private-field

Похоже, что флаги QMAKE_CXXFLAGS_WARN_ON добавляются в командную строку компилятора после QMAKE_CXXFLAGS и снова включают это предупреждение (поскольку QMAKE_CXXFLAGS содержит -Wall).

person Richard Smith    schedule 30.07.2013

Звучит странно, что вы не можете скомпилировать из-за библиотеки Qt. Поскольку я не занимаюсь разработкой на Mac, я бы проверил наличие поддерживаемых версий/компиляторов для Mac и способ компиляции на Mac. После этого, если вы соответствуете требованиям, я бы сообщил об этом как об ошибке.

Другой подход (как уже сообщалось в этой ошибке QT: To #include генерирует предупреждения) заключается в том, чтобы включать прагмы вокруг предупрежденных заголовков.

 #pragma GCC diagnostic ignored "-Wunused-private-field"
 #include <QtGui>
 #pragma GCC diagnostic warning "-Wunused-private-field"
person kikeenrique    schedule 30.07.2013
comment
Я не говорил, что не могу скомпилировать --- я просто не мог понять, как убрать конкретное предупреждение. - person David; 30.07.2013
comment
@ Дэвид, я неправильно понял. Это может помочь прагме игнорировать. - person kikeenrique; 30.07.2013
comment
Есть кое-что, что можно сказать об этом подходе, так что предупреждения по-прежнему будут доступны для кода пользователя, а не для кода библиотеки, хотя я ненавижу загрязнять свой код этими вещами. Однако, поскольку я вытащил весь исходный код для Qt, у меня возник соблазн просто удалить неиспользуемое поле самостоятельно! - person David; 30.07.2013
comment
gcc не знает о -Wunused-private-field и предупредит с неизвестной опцией после того, как это будет предупреждением для clang. - person Catskul; 29.10.2020
comment
clang поддерживает прагмы gcc, поэтому в коде указано GCC. Но это не означает, что это конкретное предупреждение существует в GCC, это был пример. clang.llvm.org/docs/UsersManual.html#pragma-gcc- диагностика - person kikeenrique; 30.10.2020

Прежде всего, я не уверен, что это ошибка QT или нет, но я нашел один недавний вопрос на форуме QT о том же. Я надеюсь, что это решено.

Возможная ошибка: предупреждение qmime.h "тип char не используется"

Есть еще один, Clang 4.2 предупреждает о неиспользуемом приватном поле QMacMime "type"

Это может помочь вам.

person Santosh Dhanawade    schedule 30.07.2013
comment
Насколько я знаю, это не ошибки --- я предполагаю, что это законные предупреждения для кода Qt, но жаль, что разработчики Qt не позаботились о том, чтобы в их коде не было таких вещей, как неиспользуемые поля и другие вещи, которые могут вызвать предупреждения. - person David; 30.07.2013

Я не фанат Clang, но согласно http://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-in-system-headers вы можете использовать флаг -isystem с каталогом, в котором находятся эти заголовки Qt, что будет рассматривать их как системные включает и подавляет предупреждения для них.

person Crowman    schedule 25.07.2013
comment
Я попытался добавить QMAKE_CXXFLAGS += -isystem-prefix /usr/local/Trolltech/Qt-4.8.6/include/ и QMAKE_CXXFLAGS += -isystem /usr/local/Trolltech/Qt-4.8.6/include/, но это не помогло. т помочь. - person David; 25.07.2013