【发布时间】:2013-09-22 00:37:24
【问题描述】:
以下内容无法编译(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() 当然会产生编译器错误嗯。
提前感谢您的任何启发!
【问题讨论】:
标签: c++ polymorphism overloading