当派生类中存在另一个重载时,无法调用基类的方法

时间:2015-08-05 21:17:18

标签: c++

我收到编译错误"函数不带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();"会使编译器满意,但对我来说这不是一个理想的解决方案。

感谢。

1 个答案:

答案 0 :(得分:3)

添加以下行:

using A::Foo;
在课程B(公共部分)中

它会起作用。

在这种情况下,来自Foo B隐藏了来自Foo A。 C ++奇怪行为之一。