Отключить предупреждение о явной инициализации базового конструктора внутри конструктора копирования производного класса - PullRequest
2 голосов
/ 25 января 2011

Я использую g ++ версии 4.2.1 с включенной -Wextra.Я включаю заголовок из библиотеки и продолжаю получать следующее предупреждение о классе в библиотеке, который активируется -Wextra (я заменил фактическое имя класса на BaseClass):

warning: base class ‘class BaseClass’ should be explicitly initialized in the copy constructor

Мой вопрос: как я могу отключить это предупреждение?Например, -Wextra также включает -Wuninitialized, но я могу переопределить это просто, передав -Wno-uninitialized в качестве флага компилятора.Есть ли что-нибудь подобное для предупреждения о конструкторе копирования?Я не смог найти ответ на страницах руководства g ++ или в других сообщениях на форуме.

Ответы [ 3 ]

6 голосов
/ 25 января 2011

Дано:

class BaseClass
{
public:
    BaseClass();
    BaseClass(const BaseClass&);
};

class DerivedClass : public BaseClass
{
public:
    DerivedClass(const DerivedClass&);
};

Этот конструктор копирования:

DerivedClass::DerivedClass(const DerivedClass& obj)
  // warning: no BaseClass initializer!
{
}

Действительно означает то же самое, что и:

DerivedClass::DerivedClass(const DerivedClass& obj)
  // Default construct the base:
  : BaseClass()
{
}

Вы можете добавить конструктор по умолчаниюинициализатор, как указано выше, если это действительно то, что вы имеете в виду, и предупреждение исчезнет.Но компилятор предлагает вам вместо этого:

DerivedClass::DerivedClass(const DerivedClass& obj)
  // Copy construct the base:
  : BaseClass(obj)
{
}
4 голосов
/ 25 января 2011

В соответствии с http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html (поиск Wextra), который является неотъемлемой частью -Wextra и не может быть отключен отдельно (например, он не указан отдельно с помощью собственной опции -W).

Похоже, что лучшее, что вы можете сделать, это либо изолировать использование библиотеки в одном файле, для которого вы отключаете -Wextra, либо вообще не использовать -Wextra и включить все компоненты по отдельности (по этой ссылке).

3 голосов
/ 25 января 2011

Если это не реальная проблема, и вы не можете изменить библиотеку (я полагаю, вы не можете или вы бы сделали это), вы можете временно отключить предупреждения, используя GCC диагностическая прагма .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...