2013-03-08 49 views
1

我有一個基類例如教(從A派生的類可以通過A指針訪問並使用methodA的任何一個)。的Xcode爲什麼的警告「隱藏」與重載虛函數

+0

警告是不是在Xcode,從你的編譯器。 – 2013-03-08 13:44:58

+0

@AnoopVaidya:是的,編譯器是鏗鏘++(除非這是Xcode的舊版本),並大量集成到Xcode環境中......如果Xcode實際上在生成該警告之前甚至單擊'compile' :) – 2013-03-08 13:57:31

回答

6

我想從A(假設它是B)派生的類之一隻覆蓋methodA()的重載之一。在這種情況下,methodA的其他超載是隱藏B。例如:

class A { 
public: 
    virtual void methodA(int) {} 
    virtual void methodA(int, int, int) {} 
}; 

class B : public A { 
public: 
    virtual void methodA(int) {} 
}; 

int main() 
{ 
    A a; 
    B b; 
    A *pa = &b; 
    a.methodA(7); //OK 
    a.methodA(7, 7, 7); //OK 
    pa->methodA(7); //OK, calls B's implementation 
    pa->methodA(7, 7, 7); //OK, calls A's implementation 
    b.methodA(7); //OK 
    b.methodA(7, 7, 7); //compile error - B's methodA only accepts one int, not three. 
} 

的解決方案是一個using聲明添加到B

class B : public A { 
public: 
    using A::methodA; //bring all overloads of methodA into B's scope 
    virtual void methodA(int) {} 
}; 
+0

打在頭上 - 非常感謝,這一直困擾着我很多年。 – user2148583 2013-03-08 14:33:15

+0

@ user2148583如果這解決了您的問題,請考慮[接受](http://meta.stackexchange.com/a/5235)這個答案。 – 2013-12-31 12:05:03

相關問題