C++ Can';t调用基类';当派生类中存在另一个重载时
编译以下代码时,我遇到一个编译器错误“函数不接受0个参数”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)
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
fromB
隐藏Foo
fromA
。一个C++奇怪的行为。确实是奇怪的,或者至少不是直觉的。谢谢。@bdristan这里的概念是来自不同名称空间的函数不会过载。如果您希望A::Foo()
成为B::Foo()
的重载,它还需要生活在B