这是Visual 2010的编译错误吗?

lez*_*lon 1 c++ visual-studio-2010 visual-studio-2008 visual-c++

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); };
};                                      // ^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

以前的代码将无法编译:error C2660: 'Derived::myFunc' : function does not take 2 arguments 显然,编译器无法看到我正在尝试调用Base类中定义的函数,或者任何覆盖它的函数.另一方面,以下代码编译好了:

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); };
};
Run Code Online (Sandbox Code Playgroud)

我想我在第一个例子中尝试做的是合法的C++,这是VS2010编译器中的一个错误吗?我和VS2008的结果相同

谢谢

编辑:我找到的解决方法是使用

virtual void myFunc(double a) { return ((Base*)this)->myFunc(a, 0.0); };
Run Code Online (Sandbox Code Playgroud)

但我不是100%肯定它有完全相同的效果,任何人都可以确认吗?

SLa*_*aks 7

此行为是设计使然.

派生类中的函数隐藏基类中的其他重载.