Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';t调用基类';当派生类中存在另一个重载时_C++ - Fatal编程技术网

C++ Can';t调用基类';当派生类中存在另一个重载时

C++ Can';t调用基类';当派生类中存在另一个重载时,c++,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)

编译以下代码时,我遇到一个编译器错误“函数不接受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++标准的指针都会被理解。 我确实意识到“intn=((A)b).Foo();”会让编译器感到高兴,但这对我来说不是一个理想的解决方案

谢谢。

添加此行:

using A::Foo;
在B课上(公共部分),它会起作用


在这种情况下,
Foo
from
B
隐藏
Foo
from
A
。一个C++奇怪的行为。

确实是奇怪的,或者至少不是直觉的。谢谢。@bdristan这里的概念是来自不同名称空间的函数不会过载。如果您希望
A::Foo()
成为
B::Foo()
的重载,它还需要生活在
B