2012-02-22 118 views
1

我寫其中類從向量和qt widget類以及和在的一個問題繼承當我調用一個函數爲這個 - 應用>尺寸()編譯器引發錯誤多重繼承ambigious功能

ambigious函數調用,

我舉個例子。

class A:public std::vector<int>,public Qwidget 
{ 
    private : 

    public: 

     int getSize() 
     { return this->size(); } 
} 

我知道這個問題是因爲這兩個向量和Q

+5

更重要的問題是爲什麼你從'std :: vector'派生。這個類不是爲繼承而設計的。 – Naveen 2012-02-22 09:56:08

+0

您可能想嘗試/子類[QListWidget](http://developer.qt.nokia.com/doc/qt-4.8/QListWidget.html)。 – 2012-02-22 10:03:26

回答

4

您需要調用明確限定大小與你真正想引用注入的基類的名字。

但是,你所做的是可怕的惡。 std::vector不打算繼承自(並且您的代碼將永遠不會編譯:它是一個模板)。如果你真的需要一個有信號/插槽shenanigans的序列容器,你應該使用QList

0

在一般情況下,你可以強制它是一個或另一個與using說哪:

#include <iostream> 

struct A { 
    void foo() { std::cout << "A\n"; } 
}; 

struct B { 
    void foo() { std::cout << "B\n"; } 
}; 

struct C : A, B { 
    using A::foo; 
    void bar() { 
    foo(); 
    } 
}; 

int main() { 
    C c; 
    c.bar(); 
} 

要麼類(適用於所有成員函數)或特定功能的內內。

然而std::vector繼承是自找麻煩呢,所以在這種情況下,解決辦法是根本不從vector繼承。