class A
{
A() {};
virtual ~A() {};
virtual void Start() {};
virtual void Start(float a) {};
};
class B : public A
{ };
class C : public A
{
virtual void Start(float a) {};
}
...
B BObj;
BObj.Start(); // -> fine, no complain from g++
...
...
C CObj;
CObj.Start(); // -> not fine -> error: no matching function for call to ‘C::Start()’
...
我懷疑問題來自兩個虛擬函數具有相同的名稱,但具有不同的參數簽名。我想知道的是,這是一個特定於g ++的錯誤消息,它是如何實現vtable的,還是基於C++標準的錯誤。具有相同名稱的虛擬成員函數的繼承
有上面的東西缺少;類例程默認情況下都是私有的,所以上面寫的代碼會發出與您發佈的代碼不同的錯誤... – fbrereto 2011-02-03 20:17:29
As @fbrereto指出您的方法的可見性僅限於A類,也不是C繼承它們。 – josefx 2011-02-03 20:21:04