以下内容无法编译(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)。
如果我用 A::foo() 替换对 foo() 的调用,错误就会消失。
但:
1)为什么会这样?在这种情况下(或类层次结构中的覆盖函数)似乎很明显只解析为 A::foo() 。
2) 更重要的是,如果我也想对 foo(void) 使用多态后期绑定,指定 A::foo() 不是我想要的,B::foo() 当然也会产生编译器错误。
提前感谢您的任何启发!