考虑以下代码示例:
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之外,是否有任何已知的解决方法可以消除 C++Builder 中的警告
struct Derived : Base {
virtual void foo(int) {}
virtual void foo(int i, doubld d) {Base::foo(i,d); }
};