2014-10-27 108 views
1

我想在基類中調用一個將在派生類中實現的純虛方法。但是,基類無參數方法似乎不被派生類繼承。我究竟做錯了什麼?編譯器是MSVC12。派生類不繼承基類的重載方法

錯誤C2660: '派生::負載':函數不採取0參數

下面是一個完整的示例(即不編譯由於錯誤):

struct Base 
{ 
    void load() { load(42); }; // Making this virtual doesn't matter. 
    virtual void load(int i) = 0; 
}; 

struct Derived : Base 
{ 
    virtual void load(int i) {}; 
}; 

int main() 
{ 
    Derived d; 
    d.load(); // error C2660: 'Derived::load' : function does not take 0 arguments 
} 
+0

@Deduplicator希望我能+1編輯。 – Steve 2014-10-28 01:48:34

+0

你是非常受歡迎的,因爲它只是最後的拋光。 – Deduplicator 2014-10-28 01:50:33

+0

[VS2008 C++似乎無法繼承常量重載方法]的可能重複(http://stackoverflow.com/questions/21958189/vs2008-c-cant-seem-to-inherit-const-overloaded-method) – TobiMcNamobi 2015-06-10 11:40:21

回答

10

哦,派生類確實繼承void load()

但是你在派生類中聲明void load(int i),這意味着它是被遮蔽的。

添加using Base::load;DerivedBase添加load所有非覆蓋定義在Derived過載設置。

或者,使用作用域分辨率運算符d.Base::load();顯式調用Base -class-version。

2

您必須明確呼叫Base一個:d.Base::load();。我不知道爲什麼,但它有效。我的猜測是覆蓋隱藏所有重載。