2

以下はコンパイルされません (Apple LLVM バージョン 4.2 (clang-425.0.28)):

class A {
public:
    virtual void foo() {};
    virtual void foo( int i ) {};
};

class B : public A {
public:
    virtual void foo( int i ) override { foo(); }
};

コンパイラ エラーは、B::foo(int) 内の foo() の呼び出しに対する「引数が少なすぎます」です。コンパイラは、私が B::foo(int) を再帰的に呼び出したいと考えているようで、A::foo(void) を呼び出したいと認識していません。

foo() の呼び出しを A::foo() に置き換えると、エラーはなくなります。

しかし:

1) なぜこれが起こっているのですか? この場合 (またはクラス階層の下のオーバーライドされた関数) に解決されることは明らかです。

2) さらに重要なことは、foo(void) に対してもポリモーフィック レイト バインディングを使用したい場合、A::foo() を指定することは私が望むものではなく、B::foo() ももちろんコンパイラ エラーを生成します。

啓発を事前にありがとう!

4

1 に答える 1