0

重複の可能性:
C++: 非表示ルールの根拠

コードがあるとします:

class  A
{       
    public:
    void f(int s) {}
};



class B:public A
{      
    public:
    void f() {}
};

int main()
{      B ob;
   ob.f(4);
} 

この場合、コンパイラは「'B::f(int)' の呼び出しに一致する関数がありません」というエラーを生成しますが、クラス B は A を public として継承しているため、B には関数「void f(int s)」が必要です。ここでコンパイラがエラーを生成する理由がわかりませんか?

4

3 に答える 3

5

これは、継承された fromを非表示にする別の を定義Bするためです。両方を利用可能にしたい場合(可能性が高い)、using 宣言を使用してスコープに含める必要があります。ffAB

class B : public A
{
  void f() {}
  using A::f;
};

この動作は、[class.member.loopkup]、特にパラグラフ 4 で指定されています。

于 2012-11-29T07:55:23.397 に答える
3

で宣言するvoid f()B、継承された fromが隠されます。次のコマンドを使用して、スコープに戻すことができます。void f(int)Ausing

class B: public A
{      
public:
    void f() {}
    using A::f;
};
于 2012-11-29T07:55:47.563 に答える
0

これは非表示と呼ばれます - C++ FAQ Entryを確認できます。問題と解決策について説明します。

于 2012-11-29T07:57:49.503 に答える