我正在使用启用了-Wextra的g ++版本4.2.1。我在库中包含了一个标题,我不断收到关于库中类的警告,该类由-Wextra启用(我用BaseClass替换了类的实际名称):
warning: base class ‘class BaseClass’ should be explicitly initialized in the copy constructor
我的问题是:如何禁用此警告?例如,-Wextra也启用-Wuninitialized,但是我可以通过将-Wno-uninitialized作为编译器标志传递来覆盖该简单。关于复制构造函数的警告有什么类似的吗?我无法在g ++联机帮助页或任何其他论坛帖子中找到答案。
答案 0 :(得分:6)
假设:
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)
{
}
答案 1 :(得分:4)
根据http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html(搜索Wextra
),这是-Wextra
的固有部分,不能单独禁用(例如,它不是单独列出的{{ 1}}选项)。
您可以做的最好的事情是将库的使用隔离到您禁用-W
的一个文件或根本不使用-Wextra
并单独启用其所有组件(从该链接)。
答案 2 :(得分:3)
如果它不是真正的问题,并且您无法更改库(我猜您不能或您已经这样做了),您可以暂时禁用警告GCC diagnostic pragma。