我收到编译错误"函数不带0个参数"在编译以下代码时。
class A
{
public:
int Foo()
{
return 1;
}
protected:
virtual void Foo(int& n)
{
n += 1;
}
};
class B : public A
{
protected:
// Override of A
void Foo(int& n)
{
n += 2;
}
};
int main(int argc, char* argv[])
{
B b;
int n = b.Foo();
return n;
}
看起来编译器坚持调用重载B :: Foo(int&)而不是A :: Foo()。我必须在这里遗漏一些明显的东西。任何解释编译器行为的C ++标准指针都将受到赞赏。
我确实意识到" int n =((A)b).Foo();"会使编译器满意,但对我来说这不是一个理想的解决方案。
感谢。
答案 0 :(得分:3)
添加以下行:
using A::Foo;
在课程B
(公共部分)中它会起作用。
在这种情况下,来自Foo
的B
隐藏了来自Foo
的 A
。 C ++奇怪行为之一。