class Base {
public:
virtual void myFunc(double a, double b) { };
virtual void myFunc(double a) { };
};
class Derived : public Base {
public:
virtual void myFunc(double a) { return this->myFunc(a, 0.0); };
}; // ^^^^^^^^^^^^^^^^^^^^
上面的代码将无法编译:error C2660: 'Derived::myFunc' : function does not take 2 arguments
显然编译器不能看到,我想调用基类中定义的函数,或重写它的任何功能。在另一方面,下面的代码编译确定:这是Visual 2010的编译错误吗?
class Base {
public:
virtual void myFunc2(double a, double b) { };
virtual void myFunc(double a) { };
};
class Derived : public Base {
public:
virtual void myFunc(double a) { return this->myFunc2(a, 0.0); };
};
我觉得我试图在第一个例子做的是合法的C++,所以这是在VS2010编译器错误?我有VS2008
感谢
编辑相同的结果:一种解决方法,我发现是使用
virtual void myFunc(double a) { return ((Base*)this)->myFunc(a, 0.0); };
,但我不是100%肯定它具有完全相同的效果,任何人都可以确认?
提示:这不是一个错误。 –
尝试添加一个'使用Base :: myFunc'到你的类'Derived'的开头。 –
[为什么派生类中的重写函数隐藏了基类的其他重载?](http://stackoverflow.com/questions/1628768/why-does-an-overridden-function-in-the- derived-class-hide-other-overloads-of-the) – Tony