2

考虑以下代码示例:

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

1 回答 1

0

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

struct Derived : Base {
  virtual void foo(int, double) {}
  virtual void foo(int) {}
};
于 2018-07-31T00:59:05.203 回答