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
显然编译器看不到我正在尝试调用基类中定义的函数或任何覆盖它的函数。另一方面,以下代码编译正常:
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% 确定它具有完全相同的效果,有人可以确认吗?