如何摆脱C ++ Builder警告“虚函数隐藏...”

时间:2013-08-19 10:05:22

标签: c++ c++builder

请考虑以下代码示例:

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); }
};

1 个答案:

答案 0 :(得分:1)

在派生类中声明方法/函数的所有形式都会删除警告。

struct Derived : Base {
  virtual void foo(int, double) {}
  virtual void foo(int) {}
};