【发布时间】:2021-06-03 11:14:50
【问题描述】:
编译以下代码时出现编译器错误“函数不接受 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();”会让编译器高兴,但这对我来说不是一个理想的解决方案。
谢谢。
【问题讨论】:
标签: c++