为什么C++编译器会出现此错误?为什么我可以从B访问lol(),但不能访问rofl()[没有参数]。渔获物在哪里?
class A
{
public:
void lol(void) {}
void rofl(void) { return rofl(0);}
virtual void rofl(int x) {}
};
class B : public A
{
public:
virtual void rofl(int x) {}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.lol();
a.rofl(1);
a.rofl();
B b;
b.lol();
b.rofl(1);
b.rofl(); //ERROR -> B::rofl function does not take 0 arguments
return 0;
}
最佳答案
B::rofl(int)
“隐藏” A::rofl()
。为了使A
的rofl
重载,您应该将B
声明为using A::rofl;
。
class B : public A {
public:
using A::rofl;
...
};
这是C++的明智之举:它警告您可能还需要重写
A::rofl()
中的B
方法。您要么这样做,要么明确声明您使用A
的其他重载。关于c++ - 继承和方法重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2973976/