2012-02-22 19 views
1

私はthis-> size()コンパイラがエラーを投げているときに関数を呼び出すと、vectorとqtウィジェットクラスから継承するアプリケーションを作成しています複数の継承曖昧な関数

あいまいな関数呼び出し、

私は例を挙げています。

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

    public: 

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

私は、ベクトルとq

+5

もっと重要な疑問は、あなたが 'std :: vector'から派生している理由です。このクラスは継承のために設計されていません。 – Naveen

+0

代わりに/ subclass [QListWidget](http://developer.qt.nokia.com/doc/qt-4.8/QListWidget.html)を試してみてください。 –

答えて

4

両方のあなたが明示的にあなたが実際に参照したい注入されたベース・クラス名とサイズへの呼び出しを修飾する必要があるため、問題がある知っています。

しかし、あなたがしているのは恐ろしい悪です。 std::vectorは継承されることは意図されていません(コードは決してコンパイルされません。テンプレートです)。あなたが本当にsignal/slot shenanigansを持つシーケンスコンテナが必要な場合は、QListを使うべきです。

#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(); 
} 

クラス内(すべてのメンバ関数に適用されます)、または特定の機能の中に次のいずれかのあなたはどの言ってusingと、どちらか一方であることを、それを強制することができます一般的なケースでは

0

std::vectorから継承

しかしこの場合には解決策がvectorを継承しないようにするだけだろうので、とにかくトラブルを求めています。