2015-07-20 47 views
0

我想知道爲什麼會出現在下面的函數的錯誤:錯誤C2660:「阿壩:: F」:函數不接受0參數

#include<iostream> 

using namespace std; 
class Saba 

{ 

public: 

    Saba(){ cout << "Saba Ctor" << endl; } 

    Saba(const Saba& a){ cout << "Saba Copy Ctor" << endl; } 

    ~Saba(){ cout << "Saba Dtor" << endl; } 

    virtual void f(){ cout << "Saba f()" << endl; } 

    virtual void g(){ cout << "Saba g()" << endl; } 

    void h(){ cout << "Saba h()" << endl; } 

}; 

class Aba : public Saba 

{ 

public: 

    Aba(){ cout << "Aba Ctor" << endl; } 

    Aba(const Aba& a){ cout << "Aba Copy Ctor" << endl; } 

    ~Aba(){ cout << "Aba Dtor" << endl; } 

    virtual void g(){ cout << "Aba g()" << endl; } 

    virtual void f(int){ cout << "Aba f(int)" << endl; } 

    virtual void h(){ cout << "Aba h()" << endl; } 

}; 

class Son : public Aba 

{ 

public: 

    Son(){ cout << "Son Ctor" << endl; } 

    Son(const Son& a){ cout << "Son Copy Ctor" << endl; } 

    ~Son(){ cout << "Son Dtor" << endl; } 

    void f(){ cout << "Son f()" << endl; } 

    void h(){ cout << "Son h()" << endl; } 

}; 

int main() 

{ 

    Saba* sabaPtr = new Son(); 

    Aba* abaPtr =dynamic_cast<Aba*>(sabaPtr); 

    abaPtr->f(); 

    abaPtr->g(); 

    abaPtr->h(); 

    delete sabaPtr; 

    return 0; 

} 

我得到一個錯誤「錯誤C2660:「阿壩:: f':函數不接受0個參數「。但是從「saba」繼承的「aba」,所以他可以使用「saba」的f()

回答

1

Aba::f,其中需要1個參數,隱藏Saba::f。這就是爲什麼當你在沒有參數的情況下調用Aba::f時,編譯器會抱怨。只爲您的信息鐺給了我這些警告:

的main.cpp:38:18:警告: '阿壩:: F' 揣重載虛函數[-Woverloaded虛擬]

virtual void f(int){ cout << "Aba f(int)" << endl; } 
      ^

main.cpp中:38:18:注意:隱藏重載虛擬功能 '阿巴:: F' 宣告這裏:不同數量的參數(1比0)

virtual void f(int){ cout << "Aba f(int)" << endl; } 
+1

感謝您更正Tree With Eyes =) – Pumkko

0

我不知道在編寫代碼時你期望什麼,但它工作正常。

在初始化過程中你已經鑄造指針從SabaAba在:

Aba* abaPtr = dynamic_cast<Aba*>(sabaPtr); 

所以,abaPtr是正確的Aba對象(當然,如果動態轉換爲全成)。接下來,在該行

abaPtr->f(); 

你調用Aba::f(int)其預計1個參數,而你不指定它規定。