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