考虑下面的代码示例:
struct Base {
virtual void foo(int) {}
virtual void foo(int, double) {}
};
struct Derived : Base {
virtual void foo(int) {}
};在Embarcadero RAD Studio2010 (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或重新定义函数之外,是否有任何已知的解决方法可以消除C++Builder中的警告
struct Derived : Base {
virtual void foo(int) {}
virtual void foo(int i, doubld d) {Base::foo(i,d); }
};发布于 2018-07-31 08:59:05
在派生类中声明所有形式的方法/函数将删除警告。
struct Derived : Base {
virtual void foo(int, double) {}
virtual void foo(int) {}
};https://stackoverflow.com/questions/18311149
复制相似问题