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
どうやらコンパイラは、私が 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); };
};
最初の例でやろうとしているのは正当な C++ だと思いますが、これは VS2010 コンパイラのバグですか? VS2008でも同じ結果が得られました
ありがとう
編集:私が見つけた回避策は使用することです
virtual void myFunc(double a) { return ((Base*)this)->myFunc(a, 0.0); };
しかし、まったく同じ効果があるかどうかは100%確信が持てません。誰か確認できますか?