请考虑以下代码示例:
struct Base {
virtual void foo(int) {}
virtual void foo(int, double) {}
};
struct Derived : Base {
virtual void foo(int) {}
};
在Embarcadero RAD Studio 2010(C ++ Builder 2010)中,这会给出(正确的)警告,告诉我Base::foo(int,double)
被Derived::foo(int)
隐藏。 (同样的警告是由gcc的-Woverloaded-virtual
触发的)通常要做的是使用指令:
struct Derived : Base {
virtual void foo(int) {}
using Base::foo;
};
这使gcc中的警告按预期静音,但对C ++ Builder没有帮助,尽管它使编译器可以看到基类函数:
Derived d;
d.foo(2,3.4);
使用using指令编译好。
除了使用#pragma warn
或重新定义函数àla
struct Derived : Base {
virtual void foo(int) {}
virtual void foo(int i, doubld d) {Base::foo(i,d); }
};
答案 0 :(得分:1)
在派生类中声明方法/函数的所有形式都会删除警告。
struct Derived : Base {
virtual void foo(int, double) {}
virtual void foo(int) {}
};