考虑以下代码示例:
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); }
};
最佳答案
在派生类中声明所有形式的方法/函数会删除警告。
struct Derived : Base {
virtual void foo(int, double) {}
virtual void foo(int) {}
};
关于c++ - 如何摆脱 C++Builder 警告 "virtual function hides...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18311149/