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ます) 通常行うことは、 using ディレクティブです。

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

1 に答える 1